首页
社区
课程
招聘
[原创]用编译器预处理代码检查调试器[大家可以无限想象]!
发表于: 2011-4-8 22:12 5113

[原创]用编译器预处理代码检查调试器[大家可以无限想象]!

2011-4-8 22:12
5113
才弄的,不要跟我说看不懂,除非你没学过逆向分析或者新手,
下面的反汇编代码是一个程序未加壳之前直接载入OD那一部分,
不是00401000
这个没上面技巧,要靠自己慢慢看编译器预处理的代码,和自己在OD里面键入反调试以及其他。。。。。
补充一点,向逻辑真这种也可以修改掉比如,我CALL Messagebox,我说的假如,
这个TEST比较是否成功,下面就是跳转JZ或其他,我们明明知道,MessageBox%99就会调用成功,所以可以把不成功的部分也修改掉!大家修改的时候尽量别显露出代码被修改过的样子,如果被人家看出来代码被修改过,知道结果吧!下面看我的反汇编代码,有注释,大家可以自己写个程序自己慢慢弄!
代码加注释:
00401110 > $  55              PUSH EBP
00401111   .  89E5            MOV EBP,ESP
00401113   .  6A FF           PUSH -1
00401115   .  68 18704000     PUSH 代码乱序.00407018
0040111A   .  68 78164000     PUSH 代码乱序.00401678       ;  SE 处理程序安装
0040111F   .  64:FF35 0000000>PUSH DWORD PTR FS:[0]
00401126   .  64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040112D   .  83EC 0C         SUB ESP,0C
00401130   .  53              PUSH EBX
00401131   .  56              PUSH ESI
00401132   .  57              PUSH EDI
00401133   .  8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
00401136      68 00000002     PUSH 2000000                                        //这里和下面的CALL跟进去发现是把2000000放入EAX,但是下面又使用EAX,而且并没用EAX作为参数
0040113B      E8 301F0000     CALL 代码乱序.00403070                              //调用函数,因此我们直接NOP掉,改为一个CALL调用来检查调试器.并且直接用200000来放入下面处理的
00401140   .  59              POP ECX
00401141   .  A3 18854000     MOV DWORD PTR DS:[408518],EAX                    //过程,我们改为 mov dword ptr ds:[408518],2000000,上面的就写CALL,
00401146   .  E8 45070000     CALL 代码乱序.00401890                               //这里是创建堆栈,不能更改
0040114B   .  85C0            TEST EAX,EAX                                       //但是这里是比较创建成功没有,我们可以想象到,创建不成功就是直接退出,因此,更改下面退出的CALL
0040114D   .  75 0D           JNZ SHORT 代码乱序.0040115C
0040114F   .  6A 01           PUSH 1                                               //更改
00401151   .  E8 3A080000     CALL 代码乱序.00401990                              //更改,这里是退出,下面有个JMP,是跳到最下面的文件运行成功结束,我们保留JMP就可以了
00401156   .  59              POP ECX                                              //更改
00401157   .  E9 9B000000     JMP 代码乱序.004011F7
0040115C   >  C745 FC 0000000>MOV DWORD PTR SS:[EBP-4],0
00401163   .  E8 38080000     CALL 代码乱序.004019A0                                //这里不知道进行了什么处理,里面有一大堆OR和比较,我们直接更改
00401168   .  E8 C3080000     CALL 代码乱序.00401A30                                // 调用GetSystemTimeAsFileTime,这函数看似没什么用.直接修改.
0040116D   .  E8 0E090000     CALL 代码乱序.00401A80
00401172   .  E8 290D0000     CALL 代码乱序.00401EA0
00401177   .  E8 C40D0000     CALL 代码乱序.00401F40
0040117C   .  BB D87C4000     MOV EBX,代码乱序.00407CD8
00401181   .  81FB D87C4000   CMP EBX,代码乱序.00407CD8
00401187   .  73 0D           JNB SHORT 代码乱序.00401196                           //这里是个比较,下面是单步到00000000,因此,我们可以想象上面的CALL是在处理EIP
00401189   >  FF13            CALL DWORD PTR DS:[EBX]                            //下面的直接修改
0040118B   .  83C3 04         ADD EBX,4
0040118E   .  81FB D87C4000   CMP EBX,代码乱序.00407CD8
00401194   .^ 72 F3           JB SHORT 代码乱序.00401189                               //一直修改到这里
00401196   >  A1 04854000     MOV EAX,DWORD PTR DS:[408504]
0040119B   .  50              PUSH EAX
0040119C   .  A1 00854000     MOV EAX,DWORD PTR DS:[408500]
004011A1   .  50              PUSH EAX
004011A2   .  E8 A9FEFFFF     CALL 代码乱序.00401050                                   //调用我们的程序了,下面的大家自己跟踪,程序退出也可以检查调试器,
004011A7   .  83C4 08         ADD ESP,8                                                  //大家可以一条一条跟踪下,以便自己的反调试,可以在神不知鬼不觉的情况下检查调试器!
004011AA   .  89C3            MOV EBX,EAX                                               //不想一个一个跟踪的话大家把主要目标放在比较上面和CALL上面,用OD打开,在直接点击CALL
004011AC   .  BE D87C4000     MOV ESI,代码乱序.00407CD8                                //,看到没用处的CALL就直接修改.
004011B1   .  81FE D87C4000   CMP ESI,代码乱序.00407CD8
004011B7   .  73 0D           JNB SHORT 代码乱序.004011C6
004011B9   >  FF16            CALL DWORD PTR DS:[ESI]
004011BB   .  83C6 04         ADD ESI,4
004011BE   .  81FE D87C4000   CMP ESI,代码乱序.00407CD8
004011C4   .^ 72 F3           JB SHORT 代码乱序.004011B9
004011C6   >  53              PUSH EBX
004011C7   .  E8 440E0000     CALL 代码乱序.00402010
004011CC   .  59              POP ECX
004011CD   .  EB 28           JMP SHORT 代码乱序.004011F7
004011CF   .  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]
004011D2   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004011D4   .  8B00            MOV EAX,DWORD PTR DS:[EAX]
004011D6   .  8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
004011D9   .  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]
004011DC   .  50              PUSH EAX
004011DD   .  8B45 E4         MOV EAX,DWORD PTR SS:[EBP-1C]
004011E0   .  50              PUSH EAX
004011E1   .  E8 8A0E0000     CALL 代码乱序.00402070
004011E6   .  83C4 08         ADD ESP,8
004011E9   .  C3              RETN
004011EA   .  8B65 E8         MOV ESP,DWORD PTR SS:[EBP-18]
004011ED   .  8B45 E4         MOV EAX,DWORD PTR SS:[EBP-1C]
004011F0   .  50              PUSH EAX
004011F1   .  E8 9A070000     CALL 代码乱序.00401990
004011F6   .  59              POP ECX
004011F7   >  8B4D F0         MOV ECX,DWORD PTR SS:[EBP-10]
004011FA   .  64:890D 0000000>MOV DWORD PTR FS:[0],ECX
00401201   .  5F              POP EDI
00401202   .  5E              POP ESI
00401203   .  5B              POP EBX
00401204   .  89EC            MOV ESP,EBP
00401206   .  5D              POP EBP
00401207   .  C3              RETN



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
完全不知所谓
2011-4-8 22:31
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
3
新手?看不懂正常
2011-4-8 22:37
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
额,新手表示无法学习,只能膜拜。

P.S.刚看到标题我还以为是用预编译指令检查调试器来着……
2011-4-8 22:49
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
5
自己在OD慢慢跟踪键入反调试代码吧
2011-4-8 22:53
0
雪    币: 859
活跃值: (304)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
6
这个好像叫 启动函数 鸟~~ 不是预处理吧
2011-4-8 23:02
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
7
学习,学习,哎,
2011-4-8 23:09
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
手动改crt0、、、、、有意思咩
2011-4-8 23:57
0
游客
登录 | 注册 方可回帖
返回
//