目标程序
程序下载:UnPackMe_ASPack2.12
解压密码:9unk
任务目标:手脱 UnPackMe_ASPack2.12,手动定位修复 IAT(输入函数地址表)
手脱 ASPack2
首先第一步是定位 OEP,我们先用 x64dbg 加载 UnPackMe_ASPack2.12.exe
同样用 esp 定律,找到 OEP 入口点(这里就过多赘述,直接看截图)
可以看到这边有一个跨段的 push 指令。这里是把程序 OEP 压入栈中,然后再用 ret 指令弹出,跳到 OEP
我们可以看到虽然已经被解析成代码了,但是解析的还不够完成,我们还需要解析一次。
这里使用插件 xAnalyzer 来分析代码,选中你要分析的代码块,然后右键选择 xAnalyzer –> xAnalyzer selection,可以看到下图代码已经正常分析了
对该进程进行 dump
这里没有修复 IAT ,打开 dump 出来的程序看看会不会报错
这里并没有使用间接跳转来调用 API (并不是所有程序调用 API 都是通过间接跳转来实现的,改程序就没有使用间接跳转)
我们直接搜索 FF 25 看看能不能找到跳转表
右键跳转到反汇编窗口
接着我们在数据窗口定位到 IAT
我们先看最后一段 75 4xxxxx 的 API 属于哪个 DLL
可以看到这些都是属于 kernel32.dll 的 API
我们稍微往上看,可以看到有 00 00 11xx 的地址
我们在内存中查找发现正明显不属于任何 DLL,也不属于任何区段,有可能是壳存放的一下垃圾数据
我们继续往上看,这里有 774xxxxx 和 775xxxxx 这两种地址
进入内存窗口可以看到,这些都是属于 user32.dll 的 API 地址
我们搜索程序的跨模块调用,看看程序调用了哪些 DLL
可以看到程序调用了 user32.dll、kernel32.dll、ntdll.dll,奇怪的是我们之前并没有看到 ntdll 相关的 API 函数
我们直接在内存窗口中跳转,看看 ntdll.dll 相关的 API 函数在哪
我们稍微往上看一下,发现 401210 这一项被混在了 kerne32.dll 的 IAT 项中
上面 IAT 表已经分析好了,现在整理一下信息
OEP 地址:00404000
IAT 起始地址:0040119C
IAT 结束地址:00401218
IAT 大小:00401218 - 0040119C = 7C
IAT 中间的垃圾数据已经被自动清理掉了
IAT 修复
reference
- 本文标题:x64dbg-手脱ASPack
- 本文作者:9unk
- 创建时间:2021-03-10 18:26:28
- 本文链接:https://9unkk.github.io/2021/03/10/x64dbg-shou-tuo-aspack/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!