dianziguan 发表于 2013-8-5 17:50

【D01E09】电子管 反破解教程之九【用API检测SOD】

本帖最后由 dianziguan 于 2013-8-5 17:59 编辑

这个cm是逆向人家的,里面调用了两个未公开的api来检测sod.
它的运行结果是如果没用od+sod调试,显示未发现sod,反之显示发现sod!
本程序的玩法是不允许修改程序的任何字节,只通过修改od+sod的配置,来通过检测,在od+sod下按F9,显示未发现sod!



为方便大家研究,直接把源码贴上来。写的比较乱,大家别笑话我。
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \MASM32\LIB\oleaut32.lib
include \MASM32\include\oleaut32.inc

.data
var14    dd 0
var10    dd 0
var0c    dd 4
var18    dd 0
AppName db "注册程序,(C)电子管 2012.08.05",0
nof_1    db "发现sod!",0
find_1   db "未发现sod!",0
fntdlldb "ntdll.dll",0
zwset1db "ZwSetInformationProcess",0
zwq1db "ZwQueryInformationProcess",0,0

.code
start:
   push edx
   call st_1
   cmp eax,0
   jz st_0
   invoke MessageBox,NULL,ADDR nof_1,ADDR AppName,MB_OK
   retn
st_0:   
   invoke MessageBox,NULL,ADDR find_1,ADDR AppName,MB_OK
   retn
st_1:
   sub esp,10h
   push ebx
   push esi
   xor esi,esi
   push offset fntdll                      ; /FileName = "ntdll.dll"
   call LoadLibraryA                         ; \LoadLibraryW
   mov ebx,eax
   cmp ebx,esi
   je loc_3
   ;mov esi,GetProcAddress                   ;kernel32.GetProcAddress
   push ebp
   push edi
   push offset    zwset1                  ; /ProcNameOrOrdinal = "ZwSetInformationProcess"
   push ebx                                 ; |hModule
   call GetProcAddress                      ; \GetProcAddress
   push offset zwq1                      ; /ProcNameOrOrdinal = "ZwQueryInformationProcess"
   push ebx                                 ; |hModule
   mov ebp,eax                           
   call GetProcAddress                     
   mov esi,eax
   mov eax,var0c                              
   push eax
   lea ecx,var10                           
   push ecx
   push 1Fh
   push -1
   call ebp                                 
   lea edx,var0c                           
   push edx
   push 4
   lea eax,var10                           
   push eax
   push 1Fh
   mov var0c,ebp                           
   push -1
   call esi                                    ;ZwQueryInformationProcess
   mov edx,var10
   cmp edx,0                                    
   jnz loc_1
   lea ecx,var0c                                 
   push ecx
   push ebp
   lea edx,var18                              
   push edx
   push7
   mov var0c,ebp                                 
   push -1
   call esi                                       ;ZwQueryInformationProcess
   mov ecx,var18                                 
   cmp ecx,0
   je loc_2
loc_1:   mov ecx,1                              
         mov var14,ecx                           
loc_2:   push ebx                                    ; /hLibModule
         call FreeLibrary                              ; \FreeLibrary
         mov eax,var14                           
         pop edi
         pop ebp
         pop esi
         pop ebx
         add esp,10h
         retn 4
loc_3:   mov eax,esi
         pop esi
         pop ebx
         add esp,10h
         retn 4
end start

SxAni丶 发表于 2013-8-5 17:58


看来已过...

dianziguan 发表于 2013-8-5 18:01

SxAni丶 发表于 2013-8-5 17:58 http://www.52pojie.cn/static/image/common/back.gif
看来已过...

你这个od没有sod插件,不算数的。
原版od就是这样的,本程序不检测od,只检测sod.

SxAni丶 发表于 2013-8-5 18:03


弱弱的问一下,这个是SOD吗?

txke 发表于 2013-8-5 18:04

本帖最后由 txke 于 2013-8-5 18:07 编辑

我的也过了

a13686593572 发表于 2013-8-5 18:40

单纯的F8

Cari丶 发表于 2013-8-5 20:03

看看我珍藏的逆天od能不能过sod

狂奔的蜗牛 发表于 2013-8-5 20:11

kanan!~~~~~~~

四裤全输 发表于 2013-8-5 20:28

直接就过了~~~{:301_1008:}

dianziguan 发表于 2013-8-5 20:49

四裤全输 发表于 2013-8-5 20:28 static/image/common/back.gif
直接就过了~~~

试试这个
http://www.52pojie.cn/thread-207864-1-1.html
页: [1] 2
查看完整版本: 【D01E09】电子管 反破解教程之九【用API检测SOD】