首页
社区
课程
招聘
[求助]新手按网上教程脱壳完了不会修复函数
发表于: 2006-11-30 00:22 4533

[求助]新手按网上教程脱壳完了不会修复函数

2006-11-30 00:22
4533
我按照网上教程能找到oep了
但是不会修复函数,能不能具体讲一下步骤和工具呢?

就是到了下面的教程就卡住不会了:

二、函数修复

用ImprotREC 只能修复一个无效指针,需要跟踪原程序,重新载入,10次Shift+F9后,到了右下角堆栈窗口看到:

0012FFA4     /0012FFB8     指针到下一个 SEH 记录
0012FFA8     |0037382B     SE 句柄
0012FFAC     |00830000
0012FFB0     |0022D000
0012FFB4     |00004000
0012FFB8     ]0012FFE0     指针到下一个 SEH 记录

直接ctrl+f10到373879,然后F2下断,Shift+F9到达后,在Dump区,Ctrl +G到402000,选中从402000到402030处下内存访问断点,F9,寄存器窗口依次可见每个待处理的函数,顺序是从402030开始的。根据寄存器窗口看到的函数名称,依次修复函数如下:

FThunk: 00002000   NbFunc: 00000003
1   00002000   advapi32.dll   01EC   RegQueryValueExA
1   00002004   advapi32.dll   01C9   RegCloseKey
1   00002008   advapi32.dll   01E2   RegOpenKeyExA

FThunk: 00002010   NbFunc: 00000007
1   00002010   kernel32.dll   00E6   FreeLibrary
1   00002014   kernel32.dll   038F   lstrcat
1   00002018   kernel32.dll   0166   GetModuleFileNameA
1   0000201C   kernel32.dll   00AC   ExitProcess
1   00002020   kernel32.dll   022F   LoadLibraryA
1   00002024   kernel32.dll   018A   GetProcAddress
1   00002028   kernel32.dll   039E   lstrlen

FThunk: 00002030   NbFunc: 00000001
1   00002030   user32.dll   01DD   MessageBoxA

三、SDK修复

函数修复完之后,还无法运行,有SDK,我们来逐一修复。运行脱壳文件,提示“3C00AD处不易读取”,OK,搜索常数“3C00AD”,找到如下地址

004011D3 - E9 D5EEFBFF   JMP 003C00AD       ; SDK

跟踪原程序,发现壳中只是简单的JMP 4011D8而已,所以这里NOP即可,保存修改,重新运行,提示“3C0095处不易读取”,找到如下地址。

004011C4 - E9 CCEEFBFF   JMP 003C0095

跟踪原程序,发现最终进入函数

77E54155 > 6A 08   PUSH 8
77E54157   68 4019E677   PUSH kernel32.77E61940
77E5415C   E8 80330000   CALL kernel32.77E574E1       ; 返回到这里

拿出API地址专家(感谢kongfoo为我们提供这么好的工具),输入77E54155,找API名,结果

77E54155 lstrcat 所在库:kernel32.dll

根据我们修复的IAT,lstrcat对应的是00002014,所以我们把 JMP 003C0095 修改成 JMP DWORD PTR DS:[402014]即可,保存修改,重新运行,提示“3C0089处不易读取”,OK,搜索常数“3C0089”,找到如下地址

004011BE   $- E9 C6EEFBFF   JMP 003C0089

F8一下,看到

003C0089 - FF25 20204000   JMP DWORD PTR DS:[402020]     ; 哈哈,这不就是

LoadLibraryA吗,OK,不用跟了,直接修改,把 JMP 003C0089 修改成 JMP DWORD PTR DS:[402020]即可,保存修改,重新运行,到这里出错

00401152 - E9 D6EEFBFF   JMP 003C002D

跟踪原程序,壳中代码是

003C002D   68 2A104000   PUSH 40102A       ; Stolen Code,补上
003C0032 - E9 20110400   JMP Doctor.00401157

把 JMP 003C002D 修改为 PUSH 40102A,即可,保存修改,重新运行,这里出错

00401158   . E8 5B000000   CALL 1_.004011B8

F7进入后,发现SDK

004011B8   $- E9 C0EEFBFF   JMP 003C007D

跟踪原程序,代码如下

003C007D - FF25 24204000   JMP DWORD PTR DS:[402024]

同上,把 JMP 003C007D 改成 JMP DWORD PTR DS:[402024]即可,保存修改,重新运行,这里出错

00401161 - E9 D2EEFBFF   JMP 003C0038

跟踪原程序,代码如下

003C0038   68 E8030000   PUSH 3E8       ; Stolen Code,补上
003C003D - E9 24110400   JMP Doctor.00401166

把 JMP 003C0038 修改为 PUSH 3E8,即可,保存修改,重新运行,OK,修复完毕。

当然,现在程序中还有一下地方有类似 JMP 003CXXXX 的代码,不过不影响程序的运行和功能,就懒得去修复了:)

以上是教程的内容,找oep那段我会了
麻烦教一下修复函数

[课程]Linux pwn 探索篇!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
11个浏览了。。。却没有一个回复。。。

怎么就不回复我呢?
困惑了我很多天我才发帖问的。。。
我知道有问题应该先百度,但是我百度google那么久都找不到答案。。。
2006-11-30 12:39
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
3
进来看了,不懂.
2006-11-30 14:56
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
教程写的比较清楚了,不明白楼主你哪个地方不明白
2006-11-30 15:02
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
直接ctrl+f10到373879,然后F2下断,Shift+F9到达后,在Dump区,Ctrl +G到402000,选中从402000到 402030处下内存访问断点,F9,寄存器窗口依次可见每个待处理的函数,顺序是从402030开始的。根据寄存器窗口看到的函数名称,依次修复函数如下:

FThunk: 00002000   NbFunc: 00000003
1   00002000   advapi32.dll   01EC   RegQueryValueExA
1   00002004   advapi32.dll   01C9   RegCloseKey
1   00002008   advapi32.dll   01E2   RegOpenKeyExA

FThunk: 00002010   NbFunc: 00000007
1   00002010   kernel32.dll   00E6   FreeLibrary
1   00002014   kernel32.dll   038F   lstrcat
1   00002018   kernel32.dll   0166   GetModuleFileNameA
1   0000201C   kernel32.dll   00AC   ExitProcess
1   00002020   kernel32.dll   022F   LoadLibraryA
1   00002024   kernel32.dll   018A   GetProcAddress
1   00002028   kernel32.dll   039E   lstrlen

FThunk: 00002030   NbFunc: 00000001
1   00002030   user32.dll   01DD   MessageBoxA

就是这里啊,不会修复函数。。。要用什么软件去修复函数啊???
2006-11-30 17:26
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ImportREC,说的是这个吧
2006-12-1 09:00
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
........
ImprotREC,修复输入表的专用工具
2006-12-1 09:13
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
用地球人都知道的方法-用ImprotREC 只能修复一个无效指针!!!

究竟具体步骤怎么做才能修复函数啊?
2006-12-1 13:03
0
游客
登录 | 注册 方可回帖
返回
//