第一期 04 绕过文件大小自校验

ESP 定律脱壳过程略过

现在我们尝试打开脱完壳的程序, 发现打不开, 这是因为它有自校验

其实程序打开了, 然后它自校验了一下, 发现程序被脱壳了, 于是它自己关闭了

OD 载入

我们可以 Breakpoint > Files > GetFileSize, 现在的壳基本都有压缩功能, 所以脱壳后的程序比原来的大, 这个 API 就是对比程序的大小, 如果大小不一致, 程序就会退出. 具体 API 信息可以查 MSDN.

我们 F9 运行

程序调用API, 右键跟进去

堆栈窗口显示程序要调用这个 API, 说明程序要比对大小了, 我们右键跟进去 00401346 这个地址.

下断

我们在这里下个断. 记得删掉刚才的 API 断点.

重新载入, 然后 F9 运行, 程序会断在自校验之前, 我们 F8 看看程序是怎么比对大小的

这里有好几个 cmp 比较指令和跳转指令, 这个跳转已经实现, 我们看一下它会跳到哪里, 然后跳到了程序结束的地方.

跳转已实现

所以我们不能让它跳转.

nop 大法, 0xC6C8 是源程序的大小, 而 0x34000 是脱壳后程序的大小, 你可以在寄存器窗口看到这个数字.

三个全部跳到一起了

我们观察这几个跳转, 发现它们跳的位置都是一样的, 也就是说它们都会跳到程序结束的地方. 我们把这三个全部 nop 掉.

现在打开软件, 程序可以运行, 大功告成~