首页
社区
课程
招聘
大大哥,为什么我的LordPE dump文件arm加密第二条进程时会这样的?
发表于: 2004-10-28 19:07 9542

大大哥,为什么我的LordPE dump文件arm加密第二条进程时会这样的?

2004-10-28 19:07
9542
收藏
免费 1
支持
分享
最新回复 (42)
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
最初由 xiluoyou 发布

佛山的三水区


上星期才上“荷花世界”玩来!我在深圳的,交个朋友怎么样?
2004-11-4 12:51
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
最初由 whyIII 发布
因为"

004545E8单元为已经解密的块数,如果解密块数>=23H,则会对第0块即00401000处代码实现加密并改变该块读写权限不能进行任何操作(GUARD),

"
........


感谢兄弟,成功dump下!

新问题又出现了,dump下的文件是VB编写的,怎样可以确定IAT大小?(如图)且修复时为什么每次到OEP处,都会出现不同的代码?狂晕了?我又做错了不知道什么地方,已经改魔术跳了。
2004-11-4 12:53
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
最初由 yuhong 发布


感谢兄弟,成功dump下!

新问题又出现了,dump下的文件是VB编写的,怎样可以确定IAT大小?(如图)且修复时为什么每次到OEP处,都会出现不同的代码?狂晕了?我又做错了不知道什么地方,已经改魔术跳了。


到了OEP处,跟VB程序不一致?这是什么回事啊?
2004-11-4 13:29
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
最初由 yuhong 发布


到了OEP处,跟VB程序不一致?这是什么回事啊?

这是因为你修改了程序的代码啊:(
2004-11-5 01:03
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
如果我不修改代码和新建EIP的话,根本没办法断到魔术跳的哦。此用作欺骗Arm的代码,如果不改总是在其他程序里转,直到程序运行都无出现魔术跳的特征码,这是不是修复后又被程序打乱了IAT表?真不明白。:(

代码是这样的:(在空地址加上的)
00401000     60                  pushad
00401001     9C                  pushfd
00401002     68 B4FB1200         push 12FBB4
00401007     33C0                xor eax,eax
00401009     50                  push eax
0040100A     50                  push eax
0040100B     E8 6D97A677         call KERNEL32.CreateMutexA
00401010     9D                  popfd
00401011     61                  popad
00401012   - E9 ECB4A677         jmp KERNEL32.OpenMutexA
2004-11-6 16:52
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
最初由 xiluoyou 发布

这是因为你修改了程序的代码啊:(


兄弟真的要向你指教了,我试了N次都无办法进入到正确的OEP处,狂晕了,我知道你是有正常进入OEP的。
2004-11-6 20:05
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
修改跳转的主要目的是得到未加密的IAT,然后添加到前面DUMP出的文件中啊:(
2004-11-6 22:26
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
最初由 yuhong 发布


兄弟真的要向你指教了,我试了N次都无办法进入到正确的OEP处,狂晕了,我知道你是有正常进入OEP的。

用OD载入未脱壳的程序,bp DebugActiveProcess,F9断下。看堆栈窗口:

0012DAC4 00423BDB /CALL 到 DebugActiveProcess 来自 NOTEPAD.00423BD5
0012DAC8 00000324 \ProcessId = 324<=====子进程句柄(以看到的自己机器看到的为准)
0012DACC 0012FF2C

打开另一个OD附加324这个子进程。然后ALT+F9返回程序:

00433999 N> - EB FE jmp short NOTEPAD.<ModuleEntryPoint><====中断在此处,还原代码
0043399B EC in al,dx
0043399C |. 6A FF push -1
0043399E |. 68 503C4500 push NOTEPAD.00453C50

还原00433999处代码代码,EB FE改为55 8B。

OK,BP OpenMutexA,F9后中断

堆栈内容:

0012F59C   004145F1  /CALL 到 OpenMutexA 来自 NOTEPAD.004145EB
0012F5A0   001F0001  |Access = 1F0001
0012F5A4   00000000  |Inheritable = FALSE
0012F5A8   0012FBDC  \MutexName = "614:A2AA26D13"  //注意MutexName这个地址每个机器不同,以看到的为主。

找一块程序领空空地址,写入一些欺骗Arm的代码。

Ctrl+G 401000

00401000    0000            ADD BYTE PTR DS:[EAX],AL  //都是空地址。
00401002    0000            ADD BYTE PTR DS:[EAX],AL
00401004    0000            ADD BYTE PTR DS:[EAX],AL
00401006    0000            ADD BYTE PTR DS:[EAX],AL
00401008    0000            ADD BYTE PTR DS:[EAX],AL
0040100A    0000            ADD BYTE PTR DS:[EAX],AL
0040100C    0000            ADD BYTE PTR DS:[EAX],AL
0040100E    0000            ADD BYTE PTR DS:[EAX],AL
00401010    0000            ADD BYTE PTR DS:[EAX],AL
00401012    0000            ADD BYTE PTR DS:[EAX],AL

OD直接双击修改,填入以下代码。

00401000    60              PUSHAD
00401001    9C              PUSHFD
00401002    68 DCFB1200     PUSH 12FBDC        //以上面堆栈中地址为准。
00401007    33C0            XOR EAX,EAX
00401009    50              PUSH EAX
0040100A    50              PUSH EAX
0040100B    E8 687BA677     CALL KERNEL32.CreateMutexA
00401010    9D              POPFD
00401011    61              POPAD
00401012  - E9 75C7A677     JMP KERNEL32.OpenMutexA
............................................................

将当前的 Eip 77E6D78C 切换到 401000 来。

点右键 选在此处新建 Eip ,看到Eip 变为 401000

F9运行,中断在OpenMutexA处,取消断点,Ctrl+G 401000,右键撤销选择,还原刚才的代码

然后下命令bp VirtualProtect,F9运行,中断几次,真至出现非法指令异常,取消断点,
再下bp GetModuleHandleA,Shift+F9运行,断下,把断点改为硬件执行,F9运行几次,直到
堆栈内容

0012BC98   00D97995  /CALL 到 GetModuleHandleA 来自 00A17995
0012BC9C   0012BDD4  \pModule = "kernel32.dll"  

看到这个动态库就可以按Alt+F9返回了
00D97995     FF15 C480B200       call dword ptr ds:[B280C4]        ; KERNEL32.GetModuleHandleA
00D9799B     8B0D E011B300       mov ecx,dword ptr ds:[B311E0]
00D979A1     89040E              mov dword ptr ds:[esi+ecx],eax
00D979A4     A1 E011B300         mov eax,dword ptr ds:[B311E0]
00D979A9     393C06              cmp dword ptr ds:[esi+eax],edi
00D979AC     75 16               jnz short 00B079C4
00D979AE     8D85 B4FEFFFF       lea eax,dword ptr ss:[ebp-14C]
00D979B4     50                  push eax
00D979B5     FF15 CC80B200       call dword ptr ds:[B280CC]        ; KERNEL32.LoadLibraryA
00D979BB     8B0D E011B300       mov ecx,dword ptr ds:[B311E0]
00D979C1     89040E              mov dword ptr ds:[esi+ecx],eax
00D979C4     A1 E011B300         mov eax,dword ptr ds:[B311E0]
00D979C9     393C06              cmp dword ptr ds:[esi+eax],edi
00D979CC     0F84 AD000000       je 00B07A7F    //这是文章中提到的magic jmp

我下了硬件执行断点,在401000段下内存断点,按F9然后不断修改标志位Z,最后中断在004010cc处,清除所有断点,用Imprec1.6f选择进程324,填入OEP地址10cc,填入RAV:72ec,size:244,不要按自动搜索IAT,直接按获取输入表,再按显示无效地址,剪掉修复抓取文件就OK了。
如果再不行我就没法了


:(
2004-11-6 22:32
0
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
看来还是我的magic jmp没有找对,再试试
2004-11-6 23:32
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
最初由 xiluoyou 发布

用OD载入未脱壳的程序,bp DebugActiveProcess,F9断下。看堆栈窗口:

0012DAC4 00423BDB /CALL 到 DebugActiveProcess 来自 NOTEPAD.00423BD5
0012DAC8 00000324 \ProcessId = 324<=====子进程句柄(以看到的自己机器看到的为准)
........


锡晒你!:p ,留个QQ给我可以?
我再使用试试你的方法。
2004-11-7 12:33
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
对于兄弟所说的“按F9然后不断修改标志位Z”,是怎样修改Z?
2004-11-7 14:50
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
最初由 whyIII 发布
看来还是我的magic jmp没有找对,再试试


这跳不难找到,只是不知道为何原因去到OEP处是不正常的代码了。
2004-11-7 14:51
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
38
最初由 xiluoyou 发布

用OD载入未脱壳的程序,bp DebugActiveProcess,F9断下。看堆栈窗口:

0012DAC4 00423BDB /CALL 到 DebugActiveProcess 来自 NOTEPAD.00423BD5
0012DAC8 00000324 \ProcessId = 324<=====子进程句柄(以看到的自己机器看到的为准)
........


奇怪的是,仍然是错乱的代码。
2004-11-8 17:59
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
最初由 yuhong 发布


奇怪的是,仍然是错乱的代码。


那也正常,主要是修改程序嘛,这个做法的主要目的是获得IAT,也能找OEP。
你应该能停在OEP处吧?
2004-11-8 23:47
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
最初由 yuhong 发布
对于兄弟所说的“按F9然后不断修改标志位Z”,是怎样修改Z?

在OD的右边堆栈上面啊,你仔细看一下就能找到的。
2004-11-8 23:48
0
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
xiluoyou得意思是即使到了oep后,其代码显示为乱码,但是iat确是完整得?可以直接修复?
2004-11-9 10:26
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
最初由 whyIII 发布
xiluoyou得意思是即使到了oep后,其代码显示为乱码,但是iat确是完整得?可以直接修复?

只对Armadillo CopyMem-ll +Debug-Blocker而言
2004-11-9 18:15
0
雪    币: 216
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
最初由 xiluoyou 发布

只对Armadillo CopyMem-ll +Debug-Blocker而言


感谢,现在明白了好多,但如果vb程序编写的,怎样来确定rav和ati的数值?
2004-11-11 16:20
0
游客
登录 | 注册 方可回帖
返回