160个crakeme之003AfKayAs.2**与算法分析及4C法去掉NAG
本文分成两部分 一部分是**与算法分析 第二部分是4C法去掉启动时的NAG
第一部分:
**
查壳 无壳VB程序
载入OD
点击否
还是搜索字符串(用来定位关键代码的最直接方式)
双击 you get it 字符串进入反汇编窗口 先大致分析下结构
向上一直翻 会找到段首的(这里也可以直接在je处下断点 不过为保险起见 建议段首下个断点)
下好断点后 不要急 F8单步慢慢向下 进行分析 最后还是来到了 je处
修改Z标志位为0 使跳转变为未实现 即可成功
所以我们只需要将je跳转nop掉即可成功**
选中je这行 鼠标右键 二进制使用nop填充 保存到可执行文件 全部复制 重命名即可
关于算法分析:
https://blog.****.net/u011027286/article/details/76427714?locationNum=3&fps=1
https://www.52pojie.cn/thread-403814-1-1.html
第二部分:
去掉启动程序时的弹窗(他延迟也太高了 烦 那就搞掉他)
还是载入OD
直接看入口点
VB程序有个特点-入口点处都是一个PUSH指令,然后一个CALL指令,看JMP 后面跟的MSVBVM50,
结合第一部分PEiD查壳结果可以断定这个程序是VB5.0编写的,PUSH将要压入堆栈的是004067D4,现在我们在数据窗口中定位到这个地址
(如果你遇到的不是这种情况的话,那么该程序可能被加过壳)
选中push AfKayAs_.004067D4这一行 右键数据窗口跟随 选择立即数
点中数据窗口中任意一个位置 接着Ctrl+G
点击OK
接着数据窗口跟踪68684000
(选中他 右键数据窗口中跟随DWORD)
这里我们可以看到两块类似的数据,每块50(十六进制)个字节的长度,每块数据的第24(十六进制)个字节处都有一个标志。该标志指定了每块代码出现的顺序
可以看到第一块的中标志是00,表示该部分代码将首先执行,而第二块中的01表示随后才会执行,所以这里我们将各两个标志的值颠倒一下
右键二进制编辑 01改00,00改01,保存文件
这样首先弹出的就是主窗口了 然后才是NAG窗口
这种方法叫做4C法去VB程序NAG窗口
参考自:
https://www.52pojie.cn/forum.php?mod=viewthread&tid=612982