vm所进行的代码级的保护是对于软件保护的最后一层
1、API断点法
如何切换到程序的代码节的位置?
》od点击e->双击xxx.exe即可
程序需要读取文本框输入的内容,所以肯定会调用GetWindowText函数,所以可以ctrl+g然后输入GetWindowText进行下断
》但是有个问题就是稍微碰一下界面它就会卡死,一直断下来,因为他会渲染,一直刷新控件(你想啊,它进行界面渲染肯定也需要知道文章才能渲染呀,那它怎么知道edit里面的文字是什么?》也是通过的getwindowstext获取的啊!!!)》所以如果标签比较少的话,我们可以给他下条件断点,也就是把这个标签窗口的句柄给他排除出去(按钮事件被其他事件干扰到)
下条件断点:shift+f2 》[esp+4!=0x00290642]
这样只有我们点击注册按钮才会断下程序,现在断下来的情况就是读取我们编辑框的内容了
读取注册码》判断注册码是否合法》提示窗口
》直接ctrl+f8自动步过,直到程序卡住在cal xxx(其实就是messagebox等待我们点击)
然后我们编辑标签:对准call点击鼠标右键,修改他的标签,因为他会全部修改,所以有可能就能顺藤摸瓜往前翻一翻找到提示成功的call
如果条件断点断不下来!!!:
od汉化版bug之一 》汉化版bug之一:换成英文原版即可
把条件断点删掉,然后在函数头部打一个断点
找到关键爆破点!!!!-> je jmp(je跳到jmp的下面)
也叫关键跳:
2、字符串搜索法
全部搜索一遍,它会自动把这些搜索到的字符串添加注释,可以对破解起到提示的作用,所以一定要养成随手搜索字符串的习惯!
但是有些时候会出现搜索不到字符串的情况出现
》od搜不到不代表其他工具搜不到,可以使用ida来进行搜索
在ida当中:view -> opensubview -> strings -> ctrl+f进行搜索,但是ida默认不支持中文搜索:右键ida属性 -> 快捷方式 -> 目标后面加上-dCULTURE=all
这样相当于给了ida一个启动的属性,就不用在命令行反复输入指令了
有些时候需要来回切换编码格式才能有效地进行逆向
ida里的交叉引用:
点击搜索到的字符串,进入如下界面,然后点击unk_480911,按下x键,进入交叉引用界面,然后直接双击进去,可以进入引用字符串的那部分函数的位置
如何保存在od当中修改后的文件?
然后点击全部复制,之后会弹出下面的这个框:
然后选中修改的区域,右键,保存文件,改成破解后xxx.exe即可
如何处理随机基址的问题?
有时候我们运行别人vs或者什么编写的软件,每次进来的时候,点击e,会发现模块的基地址会发生变化 》这是连接器干的好事,如何去除随即基址?
使用PE工具CFF:打开 》可选头 》dllcharacter 》把dll can move属性去掉 》保存,就🆗了
这样每次打开,模块就都是同一个基地址了
编写代码的时候如何规避?
3、alt+k暂停法
输入注册码,点击注册,然后点击暂停,点击K,查找函数的调用堆栈
调用堆栈怎么来的?使用微软提供的dbghelp.dll来加载调试包和打印调用堆栈
在堆栈当中push一个数据,然后是层层往上面垒的
4、内存访问断点
在od中文搜索引擎当中搜不到的字符串,比如关键的“注册失败”,但是在内存当中不一定搜不到
点击M,查找:注册失败
它的提示消息的旁边放的就是注册码,有些网络验证就是这样找的
在字节开始的位置下内存访问断点
然后一路f8往回跟,同样能够找到关键破解位置
5、硬件访问断点
先把刚刚的内存访问断点删除
但是点击注册,为什么没有断下来?
是因为od里面的反反调试插件导致的,od本身其实可以断下来的,让我们误以为是因为软件加了反调试的原因而走错了方向,但是其实是你自己的od本身出了问题。有的是汉化版的问题,有的是插件的问题。
换成x96dbg:
再下硬件访问断点:
之后顺利断下来了,证明是od的问题,而不是软件带有反调试
所以以后遇到这种情况,也要考虑调试器的问题,一个搞不定,就换一个调试器试试
x64dbg修改后如何保存?
右键》补丁》修补文件》另存为:破解版.exe即可
dbg版本为何要jmp到函数入口点?
》增量链接,方便以后修改
怎么找控制台程序的通用的入口点?
自动步过到停下来为止
然后f7进去,继续自动步过到停下来为止
最终我们会找到main函数(要记得先搜索字符串,这样便于确定)
od里面有时候程序会假死,还没打印字符串程序就卡死了
我们只需要点T,把所有线程恢复就好了
自动跟踪停下来的条件?》因为程序里面写了一个scanf所以自动步过会停下来
使用自动步过来分析易语言程序,分析vm的时候也同样会用到
好的,今天的学习就到这里了,喜欢的话多多点赞+收藏+关注哦!我们下期再见!❤❤❤