x64dbg-手脱ASPack
9unk Lv5

目标程序

程序下载:UnPackMe_ASPack2.12

解压密码:9unk

任务目标:手脱 UnPackMe_ASPack2.12,手动定位修复 IAT(输入函数地址表)

手脱 ASPack2

首先第一步是定位 OEP,我们先用 x64dbg 加载 UnPackMe_ASPack2.12.exe

1.jpg

同样用 esp 定律,找到 OEP 入口点(这里就过多赘述,直接看截图)

2.jpg

3.jpg

可以看到这边有一个跨段的 push 指令。这里是把程序 OEP 压入栈中,然后再用 ret 指令弹出,跳到 OEP
4.jpg

5.jpg

我们可以看到虽然已经被解析成代码了,但是解析的还不够完成,我们还需要解析一次。

6.jpg

这里使用插件 xAnalyzer 来分析代码,选中你要分析的代码块,然后右键选择 xAnalyzer –> xAnalyzer selection,可以看到下图代码已经正常分析了

7.jpg

对该进程进行 dump

8.jpg

这里没有修复 IAT ,打开 dump 出来的程序看看会不会报错

9.jpg

这里并没有使用间接跳转来调用 API (并不是所有程序调用 API 都是通过间接跳转来实现的,改程序就没有使用间接跳转)

11.jpg

我们直接搜索 FF 25 看看能不能找到跳转表

13.jpg

14.jpg

15.jpg

右键跳转到反汇编窗口

16.jpg

17.jpg

接着我们在数据窗口定位到 IAT

18.jpg

我们先看最后一段 75 4xxxxx 的 API 属于哪个 DLL

19.jpg

可以看到这些都是属于 kernel32.dll 的 API

我们稍微往上看,可以看到有 00 00 11xx 的地址

20.jpg

我们在内存中查找发现正明显不属于任何 DLL,也不属于任何区段,有可能是壳存放的一下垃圾数据

21.jpg

我们继续往上看,这里有 774xxxxx 和 775xxxxx 这两种地址

22.jpg

进入内存窗口可以看到,这些都是属于 user32.dll 的 API 地址

23.jpg

我们搜索程序的跨模块调用,看看程序调用了哪些 DLL

24.jpg

25.jpg

可以看到程序调用了 user32.dll、kernel32.dll、ntdll.dll,奇怪的是我们之前并没有看到 ntdll 相关的 API 函数

我们直接在内存窗口中跳转,看看 ntdll.dll 相关的 API 函数在哪

26.jpg

27.jpg

我们稍微往上看一下,发现 401210 这一项被混在了 kerne32.dll 的 IAT 项中

28.jpg

上面 IAT 表已经分析好了,现在整理一下信息
OEP 地址:00404000
IAT 起始地址:0040119C
IAT 结束地址:00401218
IAT 大小:00401218 - 0040119C = 7C

29.jpg

IAT 中间的垃圾数据已经被自动清理掉了

IAT 修复
30.jpg

31.jpg

reference

参考自:从零开始 OlllyDBG-三十五章 [Ricardo Narvaja]

  • 本文标题:x64dbg-手脱ASPack
  • 本文作者:9unk
  • 创建时间:2021-03-10 18:26:28
  • 本文链接:https://9unkk.github.io/2021/03/10/x64dbg-shou-tuo-aspack/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!