17 年前脱的壳,最近有需要,找出来看看,都快忘记了,放到这上面复活下!
00659254 769279B0 kernel32.ExitProcess
00659258 76923475 kernel32.CreateThread
执行断点的位置
00BE02F3 /E9 58000000 JMP CCMainFo.00BE0350
00BE02F8 |F9 STC
00BE02F9 |FF95 06327A12 CALL DWORD PTR SS:[EBP+127A3206] ; 。
00BE02FF |E9 08000000 JMP CCMainFo.00BE030C
00BE0304 |D187 C990E980 ROL DWORD PTR DS:[EDI+80E990C9],1
地址:
00BE02F9
00BD32F0 0000 ADD BYTE PTR [EAX], AL
00BD32F2 0000 ADD BYTE PTR [EAX], AL
00BD32F4 0000 ADD BYTE PTR [EAX], AL
00BD32F6 0000 ADD BYTE PTR [EAX], AL
00BD32F8 0000 ADD BYTE PTR [EAX], AL
00BD32FA 0000 ADD BYTE PTR [EAX], AL
00BD32FC 0000 ADD BYTE PTR [EAX], AL
00BD32FE 0000 ADD BYTE PTR [EAX], AL
00BD3300 81EC 04000000 SUB ESP, 4
00BD3306 893424 MOV DWORD PTR [ESP], ESI
008DA663 8A1B MOV BL, BYTE PTR [EBX] ; OEP
008DA665 80F9 C6 CMP CL, 0C6
008DA668 0F85 03000000 JNZ 008DA671
008DA66E 66:8B1B MOV BX, WORD PTR [EBX]
008DA671 80F9 84 CMP CL, 84
008DA674 0F85 02000000 JNZ 008DA67C
008DA67A 8B1B MOV EBX, DWORD PTR [EBX]
008DA67C 81EB EE246F34 SUB EBX, 346F24EE
008DA682 89E8 MOV EAX, EBP
008DA684 05 7F000000 ADD EAX, 7F
008DA689 8918 MOV DWORD PTR [EAX], EBX
008DA68B 81E6 40000000 AND ESI, 40
0090EDB3 81C2 04000000 ADD EDX, 4
0090EDB9 81C2 04000000 ADD EDX, 4
0090EDBF 871424 XCHG DWORD PTR [ESP], EDX
0090EDC2 5C POP ESP
0090EDC3 FF20 JMP DWORD PTR [EAX] ; OEP
0090EDC5 53 PUSH EBX
0090EDC6 FF3424 PUSH DWORD PTR [ESP]
0090EDC9 58 POP EAX
0090EDCA 53 PUSH EBX
0090EDCB 54 PUSH ESP
1:写加密的IAT地址:
008FD959 /0F85 02000000 JNZ CCMainFo.008FD961
008FD95F |8917 MOV DWORD PTR DS:[EDI],EDX ; EDX为变形的API地址 EDI为IAT地址
008FD961 \80FB E0 CMP BL,0E0
008FD964 0F85 02000000 JNZ CCMainFo.008FD96C
008FD96A 8917 MOV DWORD PTR DS:[EDI],EDX
地址: 008FD961 此时寄EDI为IAT EDX为变形的API地址
2:写未加密的IAT地址
00BE0E0D 59 POP ECX
00BE0E0E 8F00 POP DWORD PTR DS:[EAX] ; 未加密的IAT地址
00BE0E10 8128 C670DD6E SUB DWORD PTR DS:[EAX],6EDD70C6
00BE0E16 FC CLD
00BE0E17 AD LODS DWORD PTR DS:[ESI] ; 从ESI表中取值
00BE0E18 FC CLD
地址: 00BE0E16 此时寄存器: EAX为对应IAT地址 ECX为未加密的API地址
3:修改CALLIP--->判断NOP
00BE10D0 0FBFDB MOVSX EBX,BX
00BE10D3 61 POPAD
00BE10D4 803F 90 CMP BYTE PTR DS:[EDI],90
00BE10D7 0F84 46000000 JE CCMainFo.00BE1123
00BE10DD FC CLD
00BE10DE 60 PUSHAD
地址:00BE10D4 EDI为call调用处,ECX为当前的API
4:取API地址:
00BDFFC1 58 POP EAX ; 这里应该是最后得到的API地址
00BDFFC2 81C6 8700C408 ADD ESI,8C40087
00BDFFC8 0F84 07000000 JE CCMainFo.00BDFFD5
00BDFFCE 0F8B 01000000 JPO CCMainFo.00BDFFD5
地址:00BDFFC2
00BE0364 6A 3C PUSH 3C
00BE0366 DFE4 FBLD ESP ; 非法使用寄存器
00BE0368 E6 DE OUT 0DE,AL
00BE036A 8985 45DDC012 MOV DWORD PTR SS:[EBP+12C0DD45],EAX ; 这里也有写入操作API
00BE0370 E9 0B000000 JMP CCMainFo.00BE0380
00BE0375 A0 774620DD MOV AL,BYTE PTR DS:[DD204677]
00BE037A 2E:0057 71 ADD BYTE PTR CS:[EDI+71],DL
00BE037E A8 1B TEST AL,1B
地址:00BE0370
EAX=76925183 (kernel32.GetEnvironmentStringsW)
006591F4 04A80000
0065972C 7DEACD2E ntdll_12.NtdllDefWindowProc_A
00659730 7DC7851F user32.CallWindowProcA
00659734 7DC76114 user32.GetMenu
006591F4 04B50000
006591F8 04B50083
006591FC 04B50122
00659200 04B50127
00659204 04B501E1
00659208 04B5033D
0065920C 04B50418
00659210 04B504D8
00659214 04B507B6
00659218 04B507BB
0065921C 04B50C9F
00659220 04B50E32
00659224 04B50FEF
00659228 04B60000
0065922C 04B600FF
00659230 04B601EF
00659234 04B60287
00659238 04B603B7
0065923C 04B70000
00659240 04B70D83
00659244 04B70E45
00659248 04B80000
0065924C 04B8099B
00659250 04B80D1B
00659254 769279B0 kernel32.ExitProcess
00659258 76923475 kernel32.CreateThread
0065925C 04B90000
00659260 04B90852
00659540 00C3477C 3333_.00C3477C
00659544 00C34799 3333_.00C34799
00659548 00C347AE 3333_.00C347AE
0065954C 00C347BB 3333_.00C347BB
00659550 00C347C4 3333_.00C347C4
00659554 00C347DA 3333_.00C347DA
00659558 00C347ED 3333_.00C347ED
//---
004BF8F1 89B5 36198206 MOV DWORD PTR [EBP+6821936], ESI ; dayhello.004B791A
004BF8F7 60 PUSHAD
004BF8F8 66:81E6 7CC4 AND SI, 0C47C
004BF8FD E9 0E000000 JMP 004BF910
004BF902 3C 07 CMP AL, 7
004BF904 A7 CMPS DWORD PTR [ESI], DWORD PTR ES:[E>
004BF905 58 POP EAX
004BF906 61 POPAD
004BF907 ^ 74 CB JE SHORT 004BF8D4
004BF909 10ED ADC CH, CH
0061C434 . E8 5C1E0000 CALL 0061E295
0061C439 . C3 RETN
0061C43A . E8 32060100 CALL 0062CA71
0061C43F .^ E9 89FEFFFF JMP 0061C2CD
0061C444 /$ 8BFF MOV EDI, EDI
0BDDA55
00BD2D78
00633809
00BD32F4//表处理完成了...
//--开始的地方 …………。
00BDDA55 C785 D1397A12 0>MOV DWORD PTR SS:[EBP+127A39D1],0 ; 果然是开始的地方……。
00BDDA5F C785 69397A12 0>MOV DWORD PTR SS:[EBP+127A3969],0
00BDDA69 83BD D902C712 0>CMP DWORD PTR SS:[EBP+12C702D9],0
00BDDA70 74 06 JE SHORT CCMainFo.00BDDA78
00BDDA72 FF95 6E217A12 CALL DWORD PTR SS:[EBP+127A216E]
00BDDA78 FF85 81067A12 INC DWORD PTR SS:[EBP+127A0681]
00BDDA7E 60 PUSHAD
00BE0ECD /0F87 01000000 JA CCMainFo.00BE0ED4
00BE0ED3 |F5 CMC
00BE0ED4 ^\E9 7CCBFFFF JMP CCMainFo.00BDDA55 ; 处理完一轮。再跳到上面00BDDA55
00BE0ED9 E9 12000000 JMP CCMainFo.00BE0EF0
00BDDA93 FC CLD
00BDDA94 83BD 81067A12 64 CMP DWORD PTR SS:[EBP+127A0681],64 ; 比较……
00BDDA9B 0F82 52010000 JB CCMainFo.00BDDBF3
00BDDAA1 60 PUSHAD
循环的一个记录……。
第一处清零(也就是取API的项,FFFFFFFFDDDDDDDDXXXXXXXX...)
00BDDCBA 81CB 4A036F75 OR EBX,756F034A
00BDDCC0 81EB FF8BFFF5 SUB EBX,F5FF8BFF
00BDDCC6 895E FC MOV DWORD PTR DS:[ESI-4],EBX ; 清零表项……。
00BDDCC9 5B POP EBX
63EF27D5 EAX
00BDE135 8300 49 ADD DWORD PTR DS:[EAX],49
00BDE138 3B8D 191ABA12 CMP ECX,DWORD PTR SS:[EBP+12BA1A19]
00BDE13E ^ 0F85 90FFFFFF JNZ CCMainFo.00BDE0D4 ; 这里可以直接过……以上为找函数的一个过循环。直接出
00BDE144 60 PUSHAD ; ECX=555
00BDE145 81C6 DF01DD11 ADD ESI,11DD01DF
00BDE14B 66:8BC8 MOV CX,AX
00BDE14E 61 POPAD
00BDE14F 51 PUSH ECX
00BDE150 B9 E88BF23B MOV ECX,3BF28BE8
00BDE155 81C1 AB43FF7D ADD ECX,7DFF43AB
00BDE15B 81E9 93CFF1B9 SUB ECX,B9F1CF93
00BDE161 51 PUSH ECX
00BDE162 58 POP EAX
00BDE163 59 POP ECX
00BDE164 FC CLD
00BDE165 FFA5 8D1B7A12 JMP DWORD PTR SS:[EBP+127A1B8D] ; 这里不要跟上去了……太JB多了跳,会死人的
00BDE16B F8 CLC
00BDE16C 898D 553A7A12 MOV DWORD PTR SS:[EBP+127A3A55],ECX ; 其实最后是到这里来了……。上面的跳转会晕人的
00BDE172 E9 05000000 JMP CCMainFo.00BDE17C
00BDE177 7B D6 JPO SHORT CCMainFo.00BDE14F
00BDE179 0951 EE OR DWORD PTR DS:[ECX-12],EDX
00BDE17C C685 C503C712 00 MOV BYTE PTR SS:[EBP+12C703C5],0
00BDE289 4A DEC EDX
00BDE28A 03F2 ADD ESI,EDX
00BDE28C 40 INC EAX
00BDE28D 07 POP ES
00BDE28E 3F AAS ; 关键的地方来,函数的相对偏移
00BDE28F 0385 7068B612 ADD EAX,DWORD PTR SS:[EBP+12B66870]
00BDE295 60 PUSHAD
00BDE296 66:BB 6F19 MOV BX,196F
00BDE29A 66:8BF3 MOV SI,BX
HugeWritePtr--->
00BDE330 52 PUSH EDX
00BDE331 BA 4F78EB26 MOV EDX,26EB784F
00BDE336 01D0 ADD EAX,EDX
00BDE338 5A POP EDX
00BDE339 01C8 ADD EAX,ECX
00BDE33B 2D 4F78EB26 SUB EAX,26EB784F
00BDE340 F9 STC
00BDE341 8138 E8000000 CMP DWORD PTR DS:[EAX],0E8 ; 这个时候,API就出现了
00BDE347 0F85 3C010000 JNZ CCMainFo.00BDE489
00BDE34D E9 11000000 JMP CCMainFo.00BDE363
00BDE854 32B4CC 09404A5D XOR DH,BYTE PTR SS:[ESP+ECX*8+5D4A4009]
00BDE85B C586 221E9686 LDS EAX,FWORD PTR DS:[ESI+86961E22]
00BDE861 F8 CLC
00BDE862 3B85 9495B312 CMP EAX,DWORD PTR SS:[EBP+12B39594] ; 和一些固定的 API比较,就是看是不是常用的
00BDE868 0F85 51000000 JNZ CCMainFo.00BDE8BF
00BDE86E 60 PUSHAD
00BDE86F 0F88 02000000 JS CCMainFo.00BDE877
00BDFFAA 05 7103C53E ADD EAX,3EC50371
00BDFFAF 40 INC EAX
00BDFFB0 25 C1F5FF7F AND EAX,7FFFF5C1
00BDFFB5 25 6405DB7D AND EAX,7DDB0564
00BDFFBA 05 2027ABFA ADD EAX,FAAB2720
00BDFFBF 09C6 OR ESI,EAX
00BDFFC1 58 POP EAX ; 这里应该是最后得到的API地址
00BDFFC2 81C6 8700C408 ADD ESI,8C40087
00BDFFC8 0F84 07000000 JE CCMainFo.00BDFFD5
00BDFFCE 0F8B 01000000 JPO CCMainFo.00BDFFD5
00BDFFD4 F9 STC
00BE02F8 F9 STC
00BE02F9 FF95 06327A12 CALL DWORD PTR SS:[EBP+127A3206] ; 这里我认为要看看……。
00BE02FF E9 08000000 JMP CCMainFo.00BE030C
//取---〈API〉
C5B6DA7E
更多的细节看附件的脚本。。。。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2019-11-13 17:56
被wenboly编辑
,原因: 附件呢?