今天我想简简单单地把TP的ntopenprocess过了,没想到一箭双雕啊,也过了ntopenthread,但是还是高兴的太早了,过一会儿出现
我郁闷了
,我按照http://bbs.pediy.com/showthread.php?t=140344 T大的方法用PT K掉了2个tessafe内核线程还是不行,我分享下我的方法,相信有人已经解决了这个游戏环境问题,也希望哪位大牛看了我的帖子能帮我下
打开KE
反汇编ntopenprocess找到被hook处
然后右键call B30EE45E,跟随立即数
然后往上翻到顶,就是
B30EE45E了
看到IoGetCurrentProcess这个函数,这个函数是返回当前访问程序的EPROCESS
后面又把这个返回值付给 ebp-c 又把这个参数传给了地址为B30E592E的这个函数,我想的是有可能这是在对比这是不是游戏的进程,如果是游戏进程就直接调用ObOpenObjectByPointer
这里在查看返回值是不是为零,为是就跳,估计是判断成功为非,后面有有一个jmp B30EE5A0
看看如果跳这个也就是返回值为真会不会碰到ObOpenObjectByPointer
果然
有ObOpenObjectByPointer
那就对了,B30E592E这个函数的确是在对比是不是游戏的进程,我把
je short B30EE4A3这行nop掉的确成功了,但是过一会儿出现游戏环境异常,就开始我提到的那个,于是我又在B30E592E函数里试了下
跟了进去
0xB30E592E | 8BFF | mov edi, edi |
0xB30E5930 | 55 | push ebp |
0xB30E5931 | 8BEC | mov ebp, esp |
0xB30E5933 | 8B0D 985D0FB3 | mov ecx, dword ptr [B30F5D98] |
0xB30E5939 | BA 985D0FB3 | mov edx, B30F5D98 |
0xB30E593E | 32C0 | xor al, al |
0xB30E5940 | 3BCA | cmp ecx, edx |
0xB30E5942 | 74 1F | je short B30E5963 |
0xB30E5944 | 56 | push esi |
0xB30E5945 | 8B75 08 | mov esi, dword ptr [ebp+8] |
0xB30E5948 | 3B71 CC | cmp esi, dword ptr [ecx-34] |
0xB30E594B | 74 08 | je short B30E5955 |
0xB30E594D | 8B09 | mov ecx, dword ptr [ecx] |
0xB30E594F | 3BCA | cmp ecx, edx |
0xB30E5951 | 75 F2 | jne short B30E5945 |
0xB30E5953 | EB 0D | jmp short B30E5962 |
0xB30E5955 | 8B55 0C | mov edx, dword ptr [ebp+C] |
0xB30E5958 | FF41 FC | inc dword ptr [ecx-4] |
0xB30E595B | 8551 D4 | test dword ptr [ecx-2C], edx |
0xB30E595E | 74 02 | je short B30E5962 |
0xB30E5960 | B0 01 | mov al, 1 |
0xB30E5962 | 5E | pop esi |
0xB30E5963 | 5D | pop ebp |
0xB30E5964 | C2 0800 | retn 8 |
先从后面找给返回值赋1的地方
0xB30E5960 | B0 01 | mov al, 1 |
然后网上找,看到一开始它就清零
0xB30E593E | 32C0 | xor al, al |
这两个大小一样,于是我索性把这里改成mov al, 1 ,也成功了,并且这个B30E592E也是ntopenthread的判断函数,这样改也过了ntopenthread,但是也出现了游戏环境异常,
哪位大牛能帮我下啊
[课程]Android-CTF解题方法汇总!