程序功能:“断线程”技术防调试
运行平台:x86 & x64
编写时间:2012.12.13-2012.12.14
参考资料:毕业设计第一版、《加密与解密》、网上的一些x64平台资料
00401013 |. 60 PUSHAD 00401014 |. 6A 00 PUSH 0 00401016 |. 6A 00 PUSH 0 00401018 |. 6A 11 PUSH 11 0040101A |. 6A FE PUSH -2 0040101C |. 33C9 XOR ECX,ECX 0040101E |. 64:8B71 30 MOV ESI,DWORD PTR FS:[ECX+30] 00401022 |. 8B76 0C MOV ESI,DWORD PTR DS:[ESI+0C] 00401025 |. 8B76 1C MOV ESI,DWORD PTR DS:[ESI+1C] 00401028 |. 8B6E 08 MOV EBP,DWORD PTR DS:[ESI+8] 0040102B |. 8B5D 3C MOV EBX,DWORD PTR SS:[EBP+3C] 0040102E |. 8B5C2B 78 MOV EBX,DWORD PTR DS:[EBP+EBX+78] 00401032 |. 03DD ADD EBX,EBP 00401034 |. 8B4B 18 MOV ECX,DWORD PTR DS:[EBX+18] 00401037 |> 8B7B 20 /MOV EDI,DWORD PTR DS:[EBX+20] 0040103A |. 03FD |ADD EDI,EBP 0040103C |. 8B7C8F FC |MOV EDI,DWORD PTR DS:[ECX*4+EDI-4] 00401040 |. 03FD |ADD EDI,EBP 00401042 |. 33C0 |XOR EAX,EAX 00401044 |. 99 |CDQ 00401045 |> 3217 |/XOR DL,BYTE PTR DS:[EDI] 00401047 |. C1C2 05 ||ROL EDX,5 0040104A |. AE ||SCAS BYTE PTR ES:[EDI] 0040104B |.^ 75 F8 |\JNE SHORT 00401045 0040104D |. 8B43 24 |MOV EAX,DWORD PTR DS:[EBX+24] 00401050 |. 03C5 |ADD EAX,EBP 00401052 |. 0FB74448 FE |MOVZX EAX,WORD PTR DS:[ECX*2+EAX-2] 00401057 |. 8B7B 1C |MOV EDI,DWORD PTR DS:[EBX+1C] 0040105A |. 03FD |ADD EDI,EBP 0040105C |. 8BF5 |MOV ESI,EBP 0040105E |. 033487 |ADD ESI,DWORD PTR DS:[EAX*4+EDI] 00401061 |. 81FA 8D98A0E2 |CMP EDX,E2A0988D 00401067 |. 74 02 |JE SHORT 0040106B 00401069 |.^ E2 CC \LOOP SHORT 00401037 0040106B |> 8B46 01 MOV EAX,DWORD PTR DS:[ESI+1] 0040106E |. 8BD4 MOV EDX,ESP 00401070 |. 33C9 XOR ECX,ECX 00401072 |. 64:8B35 C0000 MOV ESI,DWORD PTR FS:[0C0] 00401079 |. 85F6 TEST ESI,ESI 0040107B |. 75 04 JNZ SHORT 00401081 0040107D |. CD 2E INT 2E 0040107F |. EB 07 JMP SHORT 00401088 00401081 |> 89E5 MOV EBP,ESP 00401083 |. FF5E 01 CALL FAR FWORD PTR DS:[ESI+1] ; Far jump or call 00401086 |. 89EC MOV ESP,EBP 00401088 |> 83C4 10 ADD ESP,10 0040108B |. 61 POPAD
HEX: 606A006A006A116AFE33C9648B71308B760C8B761C8B6E088B5D3C8B5C2B7803DD8B4B188B7B2003FD8B7C8FFC03FD33C0993217C1C205AE75F88B432403C50FB74448FE8B7B1C03FD8BF503348781FA8D98A0E27402E2CC8B46018BD433C9648B35C000000085F67504CD2EEB0789E5FF5E0189EC83C41061
不知道博主能看到不?好久的文章了。。。
我在学习这个,偶然看到您的这些代码,前面我知道其实就是获取 ZwSetInformationThread 的地址而已,但是后面从 0040106B 开始我就不知道是在干啥了,貌似这个API根本没调用。。。。
能给解释下吗?多谢!
401072处OD没显示完全,hex部分少了三个0,复制时需注意。已更新用于正确复制的hex。
api是用int2e或farcall直接调的,这样全部代码都是inline的,省得被从ntdll下断。32与64位win7测试通过。
int 2e的作用和用法我弄懂了个大概;
至于OD没显示全的那个到没事,因为我主要在读指令部分看到底是啥原理,而您说的那个地址处:
MOV ESI,DWORD PTR FS:[0C0]
这句是我最迷糊的,在查到的TEB结构资料里,c0偏移处显示的成员名称叫WOW32Reserved,看起来是32位的保留成员,32位下就是0,莫非在64位下有其他作用?
请问这方面的资料哪里能找到呢?谢谢
wow64程序进内核要通过64位代码中转,可搜索X86SwitchTo64BitMode关键字