您的位置:首页 > 编程语言 > ASP

处理ASProtect的Advanced Import Protect的一些想法和过程(3)

2012-12-17 18:16 274 查看
目标:找到哪些地址有 call 01ba0000代码,并且进入壳中后又进入哪个API函数。

1、在进入01ba0000开始处写入代码,可以很容易根据ESP中的内容得到call 01ba0000这句代码的地址;

获得CALL 入地址

pushad

pushfd

mov eax,dword ptr [esp+24]//这时EAX中就是想要的

mov ebx,dword ptr [地址1]//地址1中存放的是 ‘地址2’地址2是存放想要东西的开始

mov [ebx],eax

add dword ptr [地址1],4//准备存放下一个

popfd

popad

***

***原来要执行的代码

jmp 跑回原来地方执行

【部分重要二进制代码:】60 9C 8B 44 24 24 83 E8 05 8B 1D D0 01 BA 01 89 03 83 05 D0 01 BA 01 04 9D 61

2、调用哪个API函数?

在这里,00ACC2E1 F3:A6 REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI],就是比较目标函数字符串名与DLL中遍历的函数名,相同时就离得到API不远了。在此句的下一句设置跳转,去执行我们的代码,在执行我们的代码前要复制壳中的些许代码,因为在离得到API近的代码处会有检查,代码如下:

JE && ; REP后的指令过来

MOV AL,BYTE PTR DS:[ESI-1]

JMP 00ACC2E8 ; 不同的话就回到和原来一样

NOP

&&: POP ESI

POP EDI

ADD ESP,4 ; 这是对RETN指令的同步

NOP

TEST EAX,EAX

MOV EAX,DWORD PTR SS:[EBP+8]

MOV EAX,DWORD PTR DS:[EAX]

PUSH EAX

PUSH ESI

MOV EAX,DWORD PTR SS:[EBP-18]

PUSH EAX

PUSH EBX

PUSH 0AFCB13 ; call 00afca60

NOP

PUSH EBP

MOV EBP,ESP

PUSH ECX

PUSH EDX

MOV EAX,DWORD PTR SS:[EBP+10]

MOV EDX,DWORD PTR SS:[EBP+C]

SHL EAX,1

ADD EAX,DWORD PTR DS:[EDX+24]

ADD EAX,DWORD PTR SS:[EBP+8]

MOV AX,WORD PTR DS:[EAX]

AND EAX,0FFFF

SHL EAX,2

ADD EAX,DWORD PTR DS:[EDX+1C]

ADD EAX,DWORD PTR SS:[EBP+8]

MOV EAX,DWORD PTR DS:[EAX]

ADD EAX,DWORD PTR SS:[EBP+8] ; 得到真实地址,保存在EAX中

下面才是我写的代码:

PUSHAD ; 从这里开始自己代码

PUSHFD

MOV EBX,DWORD PTR DS:[地址1]

MOV DWORD PTR DS:[EBX],EAX

ADD DWORD PTR DS:[地址1],4

POPFD

POPAD

JMP 00AFCA89这是跑到壳中接着执行

在上面的复制壳代码的过程中,不是完全复制的,而是有一些处理,很不部分。比如壳中有一处是ret 我写成add esp,4 JMP **,等。

【一个完整可用的二进制代码:从00b19c00到00b19c74】:

74 09 8A 46 FF E9 DE 26 FB FF 90 5E 5F 83 C4 04 85 C0 8B 45 08 8B 00 50 56 8B 45 E8 50 53 68 13

CB AF 00 55 8B EC 51 52 8B 45 10 8B 55 0C D1 E0 90 03 42 24 03 45 08 66 8B 00 25 FF FF 00 00 C1

E0 02 03 42 1C 03 45 08 8B 00 03 45 08 60 9C 8B 1D 70 9C B1 00 89 03 83 05 70 9C B1 00 04 9D 61

E9 24 2E FE FF 00 00 00 00 00 00 00 00 00 00 00 80 9C B1 00

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

最后得到结果:

1、API:

BD 2F 81 7C F2 1E 80 7C 41 B7 80 7C F6 E8 D2 77 39 7C D2 77 BB 7A DA 77 BB 7A DA 77 E2 9D 68 7D

65 02 D3 77 95 14 82 7C 1E 62 83 7C 5D 63 83 7C E7 EA DA 77 56 BE 80 7C E7 EA DA 77 27 6C DA 77

C1 C1 33 76 56 BE 80 7C 7C B8 80 7C 7C B8 80 7C 56 BE 80 7C 7C B8 80 7C EA 07 D5 77 56 BE 80 7C

56 BE 80 7C 56 BE 80 7C 7C B8 80 7C 5D EE D3 77 F6 E8 D2 77 FE 2F 63 7D 10 7C 33 76 F2 F7 85 7C

D5 65 83 7C 17 8B 83 7C 17 8B 83 7C 77 EE 80 7C 63 25 32 76 94 4E 83 7C 9F 30 32 76 36 54 83 7C

36 54 83 7C FE 53 83 7C 94 4E 83 7C 56 BE 80 7C 5D EE D3 77

2、call 01ba0000

D3 10 40 00 31 11 40 00 4C 11 40 00 8C 31 40 00 C8 31 40 00 B6 24 40 00 04 25 40 00 9D 30 40 00

DA 22 40 00 83 23 40 00 95 4B 40 00 AC 4B 40 00 59 24 40 00 69 24 40 00 7E 24 40 00 B9 26 40 00

C2 4F 40 00 EE 4E 40 00 AB 4C 40 00 08 4D 40 00 C3 39 40 00 BC 23 40 00 3A 24 40 00 60 4F 40 00

5B 4E 40 00 10 4E 40 00 78 4C 40 00 56 13 40 00 05 15 40 00 1D 15 40 00 B0 4F 40 00 1B 32 40 00

34 32 40 00 FC 32 40 00 53 33 40 00 C9 21 40 00 CE 4F 40 00 80 33 40 00 C8 4F 40 00 F5 34 40 00

05 35 40 00 70 35 40 00 7C 35 40 00 A0 35 40 00 79 1E 40 00

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

接着下一步操作:

把得到的两种地址放在某处,我选择01ba0000这个壳的段中,

call 01ba0000 地址放在01ba0180

D3 10 40 00 31 11 40 00 4C 11 40 00 8C 31 40 00 C8 31 40 00 B6 24 40 00 04 25 40 00 9D 30 40 00

DA 22 40 00 83 23 40 00 95 4B 40 00 AC 4B 40 00 59 24 40 00 69 24 40 00 7E 24 40 00 B9 26 40 00

C2 4F 40 00 EE 4E 40 00 AB 4C 40 00 08 4D 40 00 C3 39 40 00 BC 23 40 00 3A 24 40 00 60 4F 40 00

5B 4E 40 00 10 4E 40 00 78 4C 40 00 56 13 40 00 05 15 40 00 1D 15 40 00 B0 4F 40 00 1B 32 40 00

34 32 40 00 FC 32 40 00 53 33 40 00 C9 21 40 00 CE 4F 40 00 80 33 40 00 C8 4F 40 00 F5 34 40 00

05 35 40 00 70 35 40 00 7C 35 40 00 A0 35 40 00 79 1E 40 00 00

API地址放在406e50

BD 2F 81 7C F2 1E 80 7C 41 B7 80 7C F6 E8 D2 77 39 7C D2 77 BB 7A DA 77 BB 7A DA 77 E2 9D 68 7D

65 02 D3 77 95 14 82 7C 1E 62 83 7C 5D 63 83 7C E7 EA DA 77 56 BE 80 7C E7 EA DA 77 27 6C DA 77

C1 C1 33 76 56 BE 80 7C 7C B8 80 7C 7C B8 80 7C 56 BE 80 7C 7C B8 80 7C EA 07 D5 77 56 BE 80 7C

56 BE 80 7C 56 BE 80 7C 7C B8 80 7C 5D EE D3 77 F6 E8 D2 77 FE 2F 63 7D 10 7C 33 76 F2 F7 85 7C

D5 65 83 7C 17 8B 83 7C 17 8B 83 7C 77 EE 80 7C 63 25 32 76 94 4E 83 7C 9F 30 32 76 36 54 83 7C

36 54 83 7C FE 53 83 7C 94 4E 83 7C 56 BE 80 7C 5D EE D3 77

这两个地址是互相对应的,于是再写一处代码来扫描这两个地址,把call 01ba0000这句代码改写成 call [API](暂且不管是不是应该jmp [API]),

二进制代码:【01BA0320到 --------01BA0354】

60 9C B8 50 6E 40 00 B9 80 01 BA 01 90 90 90 90 8B 18 83 FB 00 74 14 8B 39 66 C7 07 FF 15 83 C7

02 89 07 83 C1 04 83 C0 04 EB E5 90 9D 61 E9 79 0D 86 FE 90 90

设置新的EIP,让它执行。。。。。。。。。。。。

01BA0320 60 PUSHAD

01BA0321 9C PUSHFD

01BA0322 B8 506E4000 MOV EAX,406E50

01BA0327 B9 8001BA01 MOV ECX,1BA0180

01BA032C 90 NOP

01BA032D 90 NOP

01BA032E 90 NOP

01BA032F 90 NOP

01BA0330 8B18 MOV EBX,DWORD PTR DS:[EAX] ; 循环开始处

01BA0332 83FB 00 CMP EBX,0

01BA0335 74 14 JE SHORT 01BA034B ; 等于0是处理完了

01BA0337 8B39 MOV EDI,DWORD PTR DS:[ECX]

01BA0339 66:C707 FF15 MOV WORD PTR DS:[EDI],15FF

01BA033E 83C7 02 ADD EDI,2

01BA0341 8907 MOV DWORD PTR DS:[EDI],EAX

01BA0343 83C1 04 ADD ECX,4

01BA0346 83C0 04 ADD EAX,4

01BA0349 ^ EB E5 JMP SHORT 01BA0330

01BA034B 90 NOP

01BA034C 9D POPFD

01BA034D 61 POPAD

01BA034E - E9 790D86FE JMP Notepad.004010CC ; 跳转到入口点

01BA0353 90 NOP

01BA0354 90 NOP

结果失望了,IMprotRec还是不能修复。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: