好友
阅读权限25
听众
最后登录1970-1-1
|
菜鸟最近才开始研究Enigma这个壳子~
这个保护MS不强.应该是默认保护.
目标程序是我从国外论坛下载下来的~
先搞个简单的.有空了再玩难的~
嘿嘿.
下载地址.http://www.brsbox.com/filebox/down/fc/10a672f938499f03d42a1a2ff14f5bd8
希望大家支持啊~
下面是笔记..
=================================================================
大家好。今天给大家带来一个脱Enigma 1.61默认保护加壳的记事本的动画~
废话不多说,OD载入程序。
一进入OD。我们就可以看到这条命令
01003AAC 9A 83C4108B E55>CALL FAR 5DE5:8B10C483
一个跳到乱七八糟地址的远CALL。
我们不能步过这条命令。否则会引起异常退出程序。直接在下面一行F4
接下来F8单步走。
这个retn比较关键。我们先下个硬件断点。
如果以后出错了。可以少走几步~
走到这里的时候我们要搜索一条命令。
mov dword ptr ds:[edx+eax*4+4],ecx
这条命令就是处理IAT的关键指令。我也是看了前辈们的文章学习的。
如果你想知道为什么。那么请你充分利用网络的搜索功能~
好。继续单步走~
01145F72 68 8E5F1401 PUSH 01145F8E
01145F77 64:FF35 0000000>PUSH DWORD PTR FS:[0]
01145F7E 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
01145F85 31C0 XOR EAX,EAX
01145F87 3100 XOR DWORD PTR DS:[EAX],EAX
01145F89 ^ E9 9E61FDFF JMP 0111C12C
01145F8E 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
01145F92 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4]
01145F96 C740 04 0000000>MOV DWORD PTR DS:[EAX+4],0
01145F9D C740 08 0000000>MOV DWORD PTR DS:[EAX+8],0
01145F85 31C0 XOR EAX,EAX
01145F87 3100 XOR DWORD PTR DS:[EAX],EAX
一个明显的陷阱。。。。。。。
我们不能往里面跳。看看下面的代码
看到没?地址都是一一对应的。
我们就这样找到下面的一个enter指令~
F4
。。。不小心就程序跑飞。。。
再来过
我们注意一下程序返回的地址~
Return to 011460AF (notepad_.011460AF)
再看看上面的命令~
01146071 B8 AF601401 MOV EAX,011460AF
地址是相同的。这里需要注意哦~上面的call就应该是压栈用的。。
可是不知道是系统从XP变成Vsita的缘故还是单核变成双核的缘故。
现在我再走。。后面好几条RET指令都跑到乱七八糟的地址去。OD就不能继续走。
所以要不停的修改地址。。
大家看我操作。。
00E44048 6A 70 PUSH 70 ; 应该是跳到这里的。。
6A 70 68 98 18 00 01 E8 14 35 1C 00 33 DB 53 8B 3D CC 10 00 01 FF D7 66 81 38 4D 5A 0F 85 30 00
00 00 8B 48 3C 03 C8 81 39 50 45 00 00 0F 85 1F 00 00 00 0F B7 81 18 00 00 00 81 F8 0B 01 00 00
0F 84 34 00 00 00 81 F8 0B 02 00 00 0F 84 0B 00 00 00 89 9D E4 FF FF FF E9 3E 00 00 00 81 B9 84
00 00 00 0E 00 00 00 0F 86 E5 FF FF FF 33 C0 39 99 F8 00 00 00 E9 18 00 00 00 81 B9 74 00 00 00
0E 00 00 00 0F 86 C8 FF FF FF 33 C0 39 99 E8 00 00 00 0F 95 C0 89 85 E4 FF FF FF 89 9D FC FF FF
FF 6A 02 FF 15 38 13 00 01 59 81 0D 9C AB 00 01 FF FF FF FF 81 0D A0 AB 00 01 FF FF FF FF FF 15
34 13 00 01 8B 0D B8 9A 00 01 89 08 FF 15 30 13 00 01 8B 0D B4 9A 00 01 89 08 8B 05 2C 13 00 01
8B 40 00 89 05 A4 AB 00 01 E8 BE 34 1C 00 39 1D 08 96 00 01 0F 85 0C 00 00 00 68 F4 75 00 01 FF
15 28 13 00 01 59 E8 8A 34 1C 00 68 10 90 00 01 68 0C 90 00 01 E8 70 34 1C 00 8B 05 B0 9A 00 01
89 85 DC FF FF FF 8D 45 DC 50 FF 35 AC 9A 00 01 8D 45 D4 50 8D 45 D0 50 8D 45 CC 50 FF 15 20 13
00 01 89 85 C8 FF FF FF 68 08 90 00 01 68 00 90 00 01 E8 33 34 1C 00 83 C4 24 8B 05 1C 13 00 01
8B 70 00 89 B5 E0 FF FF FF 80 BE 00 00 00 00 22 0F 85 6A 00 00 00 46 89 B5 E0 FF FF FF 8A 06 3A
C3 0F 84 09 00 00 00 80 F8 22 0F 85 E6 FF FF FF 80 BE 00 00 00 00 22 0F 85 07 00 00 00 46 89 B5
E0 FF FF FF 8A 06 3A C3 0F 84 09 00 00 00 80 F8 20 0F 86 E6 FF FF FF 89 9D AC FF FF FF 8D 45 80
50 FF 15 D0 10 00 01 F6 85 AC FF FF FF 01 0F 84 25 00 00 00 0F B7 85 B0 FF FF FF E9 1C 00 00 00
80 BE 00 00 00 00 20 0F 86 B7 FF FF FF 46 89 B5 E0 FF FF FF E9 E7 FF FF FF 6A 0A 58 50 56 53 53
FF D7 50 E8 E6 E6 1B 00 8B F0 89 B5 C4 FF FF FF 39 9D E4 FF FF FF 0F 85 07 00 00 00 56 FF 15 18
13 00 01 FF 15 00 13 00 01 E9 E1 32 1C 00 8B 45 EC 8B 48 00 8B 49 00 89 8D D8 FF FF FF 50 51 E8
3A 33 1C 00 59 59 C3
程序活活抽取了这么多个字节的OEP。= =
有没有发现什么问题?
没有足够的空间给我们填充原来的字节1!!
我晕死。看来只好像壳子一样。找个地方填好我们的原本OEP。再跳转回来。= =。
01007604 0000 ADD BYTE PTR DS:[EAX],AL
但这样修改也有弊端。很多jmp和call的地址都不对。
只有手动修复。。。nonawrite我用不来= =。。。。
00E44048 6A 70 PUSH 70 ; 应该是跳到这里的。。
00E4404A 68 98180001 PUSH 1001898
00E4404F E8 14351C00 CALL notepad_.01007568
00E44054 33DB XOR EBX,EBX
00E44056 53 PUSH EBX
00E44057 8B3D CC100001 MOV EDI,DWORD PTR DS:[10010CC] ; kernel32.GetModuleHandleA
00E4405D FFD7 CALL EDI
00E4405F 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D
00E44064 0F85 30000000 JNZ 00E4409A
00E4406A 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
00E4406D 03C8 ADD ECX,EAX
00E4406F 8139 50450000 CMP DWORD PTR DS:[ECX],4550
00E44075 0F85 1F000000 JNZ 00E4409A
00E4407B 0FB781 18000000 MOVZX EAX,WORD PTR DS:[ECX+18]
00E44082 81F8 0B010000 CMP EAX,10B
00E44088 0F84 34000000 JE 00E440C2
00E4408E 81F8 0B020000 CMP EAX,20B
00E44094 0F84 0B000000 JE 00E440A5
00E4409A 899D E4FFFFFF MOV DWORD PTR SS:[EBP-1C],EBX
00E440A0 E9 3E000000 JMP 00E440E3
00E440A5 81B9 84000000 0>CMP DWORD PTR DS:[ECX+84],0E
00E440AF ^ 0F86 E5FFFFFF JBE 00E4409A
00E440B5 33C0 XOR EAX,EAX
00E440B7 3999 F8000000 CMP DWORD PTR DS:[ECX+F8],EBX
00E440BD E9 18000000 JMP 00E440DA
00E440C2 81B9 74000000 0>CMP DWORD PTR DS:[ECX+74],0E
00E440CC ^ 0F86 C8FFFFFF JBE 00E4409A
00E440D2 33C0 XOR EAX,EAX
00E440D4 3999 E8000000 CMP DWORD PTR DS:[ECX+E8],EBX
00E440DA 0F95C0 SETNE AL
00E440DD 8985 E4FFFFFF MOV DWORD PTR SS:[EBP-1C],EAX
00E440E3 899D FCFFFFFF MOV DWORD PTR SS:[EBP-4],EBX
00E440E9 6A 02 PUSH 2
00E440EB FF15 38130001 CALL DWORD PTR DS:[1001338] ; msvcrt.__set_app_type
00E440F1 59 POP ECX
00E440F2 810D 9CAB0001 F>OR DWORD PTR DS:[100AB9C],FFFFFFFF
00E440FC 810D A0AB0001 F>OR DWORD PTR DS:[100ABA0],FFFFFFFF
00E44106 FF15 34130001 CALL DWORD PTR DS:[1001334] ; msvcrt.__p__fmode
00E4410C 8B0D B89A0001 MOV ECX,DWORD PTR DS:[1009AB8]
00E44112 8908 MOV DWORD PTR DS:[EAX],ECX
00E44114 FF15 30130001 CALL DWORD PTR DS:[1001330] ; msvcrt.__p__commode
00E4411A 8B0D B49A0001 MOV ECX,DWORD PTR DS:[1009AB4]
00E44120 8908 MOV DWORD PTR DS:[EAX],ECX
00E44122 8B05 2C130001 MOV EAX,DWORD PTR DS:[100132C] ; msvcrt._adjust_fdiv
00E44128 8B40 00 MOV EAX,DWORD PTR DS:[EAX]
00E4412B 8905 A4AB0001 MOV DWORD PTR DS:[100ABA4],EAX
00E44131 E8 BE341C00 CALL notepad_.010075F4
00E44136 391D 08960001 CMP DWORD PTR DS:[1009608],EBX
00E4413C 0F85 0C000000 JNZ 00E4414E
00E44142 68 F4750001 PUSH 10075F4
00E44147 FF15 28130001 CALL DWORD PTR DS:[1001328] ; msvcrt.__setusermatherr
00E4414D 59 POP ECX
00E4414E E8 8A341C00 CALL notepad_.010075DD
00E44153 68 10900001 PUSH 1009010
00E44158 68 0C900001 PUSH 100900C
00E4415D E8 70341C00 CALL notepad_.010075D2 ; JMP to msvcrt._initterm
00E44162 8B05 B09A0001 MOV EAX,DWORD PTR DS:[1009AB0]
00E44168 8985 DCFFFFFF MOV DWORD PTR SS:[EBP-24],EAX
00E4416E 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
00E44171 50 PUSH EAX
00E44172 FF35 AC9A0001 PUSH DWORD PTR DS:[1009AAC]
00E44178 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
00E4417B 50 PUSH EAX
00E4417C 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
00E4417F 50 PUSH EAX
00E44180 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
00E44183 50 PUSH EAX
00E44184 FF15 20130001 CALL DWORD PTR DS:[1001320] ; msvcrt.__getmainargs
00E4418A 8985 C8FFFFFF MOV DWORD PTR SS:[EBP-38],EAX
00E44190 68 08900001 PUSH 1009008
00E44195 68 00900001 PUSH 1009000
00E4419A E8 33341C00 CALL notepad_.010075D2 ; JMP to msvcrt._initterm
00E4419F 83C4 24 ADD ESP,24
00E441A2 8B05 1C130001 MOV EAX,DWORD PTR DS:[100131C] ; msvcrt._acmdln
00E441A8 8B70 00 MOV ESI,DWORD PTR DS:[EAX]
00E441AB 89B5 E0FFFFFF MOV DWORD PTR SS:[EBP-20],ESI
00E441B1 80BE 00000000 2>CMP BYTE PTR DS:[ESI],22
00E441B8 0F85 6A000000 JNZ 00E44228
00E441BE 46 INC ESI
00E441BF 89B5 E0FFFFFF MOV DWORD PTR SS:[EBP-20],ESI
00E441C5 8A06 MOV AL,BYTE PTR DS:[ESI]
00E441C7 3AC3 CMP AL,BL
00E441C9 0F84 09000000 JE 00E441D8
00E441CF 80F8 22 CMP AL,22
00E441D2 ^ 0F85 E6FFFFFF JNZ 00E441BE
00E441D8 80BE 00000000 2>CMP BYTE PTR DS:[ESI],22
00E441DF 0F85 07000000 JNZ 00E441EC
00E441E5 46 INC ESI
00E441E6 89B5 E0FFFFFF MOV DWORD PTR SS:[EBP-20],ESI
00E441EC 8A06 MOV AL,BYTE PTR DS:[ESI]
00E441EE 3AC3 CMP AL,BL
00E441F0 0F84 09000000 JE 00E441FF
00E441F6 80F8 20 CMP AL,20
00E441F9 ^ 0F86 E6FFFFFF JBE 00E441E5
00E441FF 899D ACFFFFFF MOV DWORD PTR SS:[EBP-54],EBX
00E44205 8D45 80 LEA EAX,DWORD PTR SS:[EBP-80]
00E44208 50 PUSH EAX
00E44209 FF15 D0100001 CALL DWORD PTR DS:[10010D0] ; kernel32.GetStartupInfoA
00E4420F F685 ACFFFFFF 0>TEST BYTE PTR SS:[EBP-54],1
00E44216 0F84 25000000 JE 00E44241
00E4421C 0FB785 B0FFFFFF MOVZX EAX,WORD PTR SS:[EBP-50]
00E44223 E9 1C000000 JMP 00E44244
00E44228 80BE 00000000 2>CMP BYTE PTR DS:[ESI],20
00E4422F ^ 0F86 B7FFFFFF JBE 00E441EC
00E44235 46 INC ESI
00E44236 89B5 E0FFFFFF MOV DWORD PTR SS:[EBP-20],ESI
00E4423C ^ E9 E7FFFFFF JMP 00E44228
00E44241 6A 0A PUSH 0A
00E44243 58 POP EAX
00E44244 50 PUSH EAX
00E44245 56 PUSH ESI
00E44246 53 PUSH EBX
00E44247 53 PUSH EBX
00E44248 FFD7 CALL EDI
00E4424A 50 PUSH EAX
00E4424B E8 E6E61B00 CALL notepad_.01002936
00E44250 8BF0 MOV ESI,EAX
00E44252 89B5 C4FFFFFF MOV DWORD PTR SS:[EBP-3C],ESI
00E44258 399D E4FFFFFF CMP DWORD PTR SS:[EBP-1C],EBX
00E4425E 0F85 07000000 JNZ 00E4426B
00E44264 56 PUSH ESI
00E44265 FF15 18130001 CALL DWORD PTR DS:[1001318] ; msvcrt.exit
00E4426B FF15 00130001 CALL DWORD PTR DS:[1001300] ; msvcrt._cexit
00E44271 - E9 E1321C00 JMP notepad_.01007557
00E44276 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
00E44279 8B48 00 MOV ECX,DWORD PTR DS:[EAX]
00E4427C 8B49 00 MOV ECX,DWORD PTR DS:[ECX]
00E4427F 898D D8FFFFFF MOV DWORD PTR SS:[EBP-28],ECX
00E44285 50 PUSH EAX
00E44286 51 PUSH ECX
00E44287 E8 3A331C00 CALL notepad_.010075C6 ; JMP to msvcrt._XcptFilter
00E4428C 59 POP ECX
00E4428D 59 POP ECX
00E4428E C3 RETN
00E4428F - E9 AA321C00 JMP notepad_.0100753E
这是一个考验眼力的过程。呵呵~
oh yeah~程序可以运行。
不过革命尚未成功。我们还需要努力一下。。。
我们跟未加壳的笔记本比较一下多了哪些区段
多了四个区段。。额。我们就删除一下试试吧~
不行。。
再来。。
哦~
删除这两个的话。程序没问题还是可以继续运行。。
这样的话就是比较“完美”的脱壳了。
呵呵。动画就到这里了~~谢谢大家观赏!
============================================================================ |
免费评分
-
查看全部评分
|