首页
社区
课程
招聘
[己解决] 2个穿山甲壳的问题 请高手解答下 谢谢啊谢谢、、
发表于: 2008-1-21 19:16 5417

[己解决] 2个穿山甲壳的问题 请高手解答下 谢谢啊谢谢、、

2008-1-21 19:16
5417
在我脱  黑鹰VIP教程 16课的那个教程程序  当bp OpenMutexA断点后SHIFT+F9  教程上是来到这里。
7C80EA1D    55                     push ebp

而我却返回到下面
7C80EA1B >  8BFF                   mov edi,edi
7C80EA1D    55                     push ebp
7C80EA1E    8BEC                   mov ebp,esp
7C80EA20    51                     push ecx
7C80EA21    51                     push ecx
7C80EA22    837D 10 00             cmp dword ptr ss:[ebp+10],0
7C80EA26    56                     push esi
7C80EA27    0F84 66530300          je kernel32.7C843D93
7C80EA2D    64:A1 18000000         mov eax,dword ptr fs:[18]
7C80EA33    FF75 10                push dword ptr ss:[ebp+10]
7C80EA36    8DB0 F80B0000          lea esi,dword ptr ds:[eax+BF8]
7C80EA3C    8D45 F8                lea eax,dword ptr ss:[ebp-8]
7C80EA3F    50                     push eax

  还有第2个问题。。。    当我脱
Armadillo 1.XX- 2.xx -> Silicon Realms Toolworks   双线程  非标准版的时候   附加子进程       BP OpenMutexA下断后  出现  程序主线程已挂起   

                  上面2个问题 求求各位大哥解决下   

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶一下啊。。。
2008-1-21 20:06
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
来个人  回答下下啊。。。
2008-1-21 20:38
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
qiu qiu大哥们  解答一下
2008-1-21 23:04
0
雪    币: 50161
活跃值: (20620)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
你应该正确的,只是 黑鹰教程描述时,把第一行省略了。看的时候取其思路,勿硬搬。
2008-1-22 09:50
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢坛主  谢谢
2008-2-19 02:32
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
7
第2个问题 在BP OpenMutexA断下后 要转双进程为单进程

CRTL+G前往表达式401000
        在此键入代码
         00401000     60                      pushad                ;此处新建EIP,RUN
        00401001     9C                              pushfd
        00401002     68 F8FB1300              push 13FBF8   ;这为上面堆栈的值,根据自己机子而定                         ; ASCII "A8:AECE28122"
        00401007     33C0                     xor eax,eax
        00401009     50                       push eax
        0040100A     50                       push eax
        0040100B     E8 2FDB407C              call kernel32.CreateMutexA    ;这不能直接用十六进制添入
        00401010     9D                       popfd
        00401011     61                       popad
        00401012   - E9 04DC407C              jmp kernel32.OpenMutexA     ;这不能直接用十六进制添入
2008-2-19 11:13
0
雪    币: 2181
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
下同样断点 ALT+F9
JZ变Jnz
F9运行  ALT+F9
jnz变JZ
F9运行 取消断点 同样也是双变单。
2008-2-19 12:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
穿山甲 双进程 标准保护

第一步
载入OD,插件隐藏,停在这里
004E2000 >  60              pushad
004E2001    E8 00000000     call    004E2006
004E2006    5D              pop     ebp
004E2007    50              push    eax
004E2008    51              push    ecx

断点 BP OpenMutexA ,F9运行

异常在这里,添加异常,Shift+F9继续
004EB5C3    F0:             prefix lock:
004EB5C4    F0:C7           ???                                      ; 未知命令
004EB5C6    C8 64678F       enter   6764, 8F
004EB5CA    06              push    es
004EB5CB    0000            add     byte ptr [eax], al

停在这里
7C80EA1B >  8BFF            mov     edi, edi
7C80EA1D    55              push    ebp
7C80EA1E    8BEC            mov     ebp, esp
7C80EA20    51              push    ecx
7C80EA21    51              push    ecx
7C80EA22    837D 10 00      cmp     dword ptr [ebp+10], 0
7C80EA26    56              push    esi

代码窗口 Ctrl+G  ->  00401000
00401000    0000            add     byte ptr [eax], al
00401002    0000            add     byte ptr [eax], al
00401004    0000            add     byte ptr [eax], al
00401006    0000            add     byte ptr [eax], al

这些都是空数据段,添加以下代码

00401000    60              pushad                                                                //此处新建EIP,RUN
00401001    9C              pushfd
00401002    68 54FD1200     push    12FD54                           ; ASCII "8B8::DAE2B8142D"    //这为上面堆栈的值,根据自己机子而定
00401007    33C0            xor     eax, eax
00401009    50              push    eax
0040100A    50              push    eax
0040100B    E8 2FD9407C     call    kernel32.CreateMutexA
00401010    9D              popfd
00401011    61              popad
00401012  - E9 04DA407C     jmp     kernel32.OpenMutexA

60 9C 68 54 FD 12 00 33 C0 50 50 E8 2F D9 40 7C 9D 61 E9 04 DA 40 7C

再此来到 Ctrl+G  ->  00401000 撤消修改代码
撤消断点

第二步
断点  he OutputDebugStringA Shift+F9
停在这里
7C859D78 >  68 34020000     push    234
7C859D7D    68 A0A0857C     push    7C85A0A0
7C859D82    E8 3F87FAFF     call    7C8024C6
7C859D87    A1 CC46887C     mov     eax, dword ptr [7C8846CC]

看堆栈,找到哪个0012EB58   0012F3A4  \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"

在上面那行 在数据窗口中跟随,在数据窗口中(右键 长型 地址)右键 二进制  00填充,这是OD的字符串溢出 ,
继续 Shift+F9
7C859D78 >  68 34020000     push    234
7C859D7D    68 A0A0857C     push    7C85A0A0
7C859D82    E8 3F87FAFF     call    7C8024C6
7C859D87    A1 CC46887C     mov     eax, dword ptr [7C8846CC]

再像上面那样来一次

此时取消断点,返回
继续下断 he GetModuleHandleA+5(2000下+5不行)Shift+f9

看堆栈

0012943C  /0012EB50
00129440  |00D364B5  返回到 00D364B5 来自 kernel32.GetModuleHandleA
00129444  |00D61BB0  ASCII "kernel32.dll"
00129448  |00D62B68  ASCII "VirtualAlloc"

0012943C  /0012EB50
00129440  |00D364D3  返回到 00D364D3 来自 kernel32.GetModuleHandleA
00129444  |00D61BB0  ASCII "kernel32.dll"
00129448  |00D62B5C  ASCII "VirtualFree"

第三次来到这里(堆栈)
00129188  /00129440
0012918C  |00D18C74  返回到 00D18C74 来自 kernel32.GetModuleHandleA
00129190  |00129308  ASCII "kernel32.dll"  //取消断点 Alt+f9返回,这就是返回时机

停在这里
00D18C74    8B55 F4         mov     edx, dword ptr [ebp-C]
00D18C77    8B0D 84EFD600   mov     ecx, dword ptr [D6EF84]
00D18C7D    890491          mov     dword ptr [ecx+edx*4], eax
00D18C80    8B55 F4         mov     edx, dword ptr [ebp-C]
00D18C83    A1 84EFD600     mov     eax, dword ptr [D6EF84]

往下拉,找到 00D18DED   /0F84 45010000   je      00D18F38          //这了,Magic Jump 改JMP

再往下拉

00D18F73  ^\E9 74FCFFFF     jmp     00D18BEC
00D18F78    EB 03           jmp     short 00D18F7D      //在这里下硬件执行Shift+F9 断下后撤消断点
00D18F7A    D6              salc
00D18F7B    D6              salc

重要:断下后,记得要撤消Magic Jump处的修改!

为何要这样做?我发现程序在下面会依据原先的代码进行解码,
以前下 硬件断点 操作没有修改原代码,所以解码正确。
而直接修改Magic Jump后改变了原先的代码,导致解码不正确而异常出错!
现在我们在解码以前恢复原先的代码,因此就不会再出错了!
,
最后一次下断(也可以用内存Alt+M 找00401000)下断,再这里 我们下断点 bp CreateThread

7C810637 >  8BFF            mov     edi, edi
7C810639    55              push    ebp
7C81063A    8BEC            mov     ebp, esp
7C81063C    FF75 1C         push    dword ptr [ebp+1C]
7C81063F    FF75 18         push    dword ptr [ebp+18]

取消断点,返回

00D243AC    50              push    eax
00D243AD    FF15 5CF2D500   call    dword ptr [D5F25C]               ; kernel32.CloseHandle
00D243B3    5E              pop     esi
00D243B4    5B              pop     ebx

F8单步
00D4046E    51              push    ecx
00D4046F    8B55 F4         mov     edx, dword ptr [ebp-C]
00D40472    2B55 DC         sub     edx, dword ptr [ebp-24]
00D40475    FFD2            call    edx                              ; 风火助理.0040389F   //这里F7进,就是OEP
00D40477    8945 FC         mov     dword ptr [ebp-4], eax
00D4047A    8B45 FC         mov     eax, dword ptr [ebp-4]

是不是红色的代码,那就对了,脱壳+修复

用PEID查脱壳后的还是显示 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
其实是PEID的误报,壳是脱了的。
2008-3-15 21:14
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
昏昏     这个以前发的 怎么突然飞出来了   - -!...   谢谢上面的大哥 这个我已经会了..

   不过  又有问题出来了...  请大哥看看我的新问题//
2008-3-15 21:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不好意思,贴错地方了
2008-3-15 21:50
0
游客
登录 | 注册 方可回帖
返回
//