我无语了,陷阱太多了,把我得出的结论分享一下.....
希望今天晚上能完全破解掉........555555555555555555555555
===================================
好久没破解了,趁着最近十一,赶快破一个:)
这个CrackMe很有意思,用了很多防护手段,下面我来一一解剖:)
首先用od加载好,F9试一下,应该卡在
7C92122B 90 NOP
7C92122C 90 NOP
7C92122D 90 NOP
7C92122E 90 NOP
7C92122F 90 NOP
7C921230 > CC INT3 ------卡点
7C921231 C3 RETN
7C921232 8BFF MOV EDI,EDI
这个点上
恩,好,咱们来看看堆栈
0013FB30 004765D5 返回到 SCG移动?004765D5 来自 SCG移动?00474900
从这里知道是由474900引发了一个异常,在4765D5处理到这里来的,那么在474900那块断吧:)
重新开始,F9,应该断在这
00474900 A1 A0D34900 MOV EAX,DWORD PTR DS:[49D3A0]
00474905 . 0BC0 OR EAX,EAX
00474907 . 74 02 JE SHORT SCG移动?0047490B
00474909 . FFE0 JMP EAX
0047490B > 68 E8484700 PUSH SCG移动?004748E8 ; dfg
00474910 . B8 A0144000 MOV EAX,<JMP.&MSVBVM60.DllFunctionCall>
00474915 . FFD0 CALL EAX
单步跟,到CALL EAX的时候F7进来,发现到MSVBVM60.DLL,我们的目标不是这个,于是《调试》--》 《执行到用户代码》
呵呵,发现什么没有?
00474917 - FFE0 JMP EAX ; kernel32.DebugBreak
阴险吧……
看到这步,你的第一反应是什么?NOP?哈哈,那你可就上钩了,你看看下面是什么句子
004748D5 00 DB 00
004748D6 00 DB 00
004748D7 00 DB 00
004748D8 0B DB 0B
004748D9 00 DB 00
004748DA 00 DB 00
004748DB 00 DB 00
所以,找到这段的入口点,00474900有个“本地调用来自 004765DO”
知道要干什么吗?HIHI~
CTRL+G,4765D0,找到那个要命的CALL没?这回给他做了NOP掉:)
保存一下
重新加载新的文件,再F9运行
怎么不动了呢?暂停一下,发现猫腻!
00488B68 . FF15 1C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
00488B6E . 81C4 F0000000 ADD ESP,0F0
00488B74 . 66:3BF3 CMP SI,BX
00488B77 . 74 02 JE SHORT SCG移动?00488B7B
00488B79 >- EB FE JMP SHORT SCG移动?00488B79 ---------------
00488B7B > 895D FC MOV DWORD PTR SS:[EBP-4],EBX
00488B7E . 9B WAIT
看到488b79没?他在干吗?自己调用自己?能不死循环吗?!我们来帮助他一下(偷笑),不用说步骤了吧
再保存,加载。自效验就完全地被干掉了
============================================
自效验被干过了,下一步该怎么办呢?
来上手C32ASM,字符串查找,怎么也找不到……
大家自己随便跟踪一下,就会发现频繁地使用MSVBVM60.rtcVarBstrFromAnsi
这是什么意思?
如果你看过"VB函数与API"这本宝典的话(看雪FTP上就有,顺便说一句:我刚要整理出来的VB资料全集就被这厮给毁了555)
※※※※※※※※※※※※※※※※※
VB:
Private Sub Command1_Click()
A = Chr(75) ;(如75改为变量,汇编相同)
MsgBox (A)
End Sub
ASM:
00401A37 . push 4B ;4BH=75D
00401A39 . push eax ;Empty(eax)=>A
00401A49 . call dword ptr ds:[<&MSVBVM60.rtcVarBstrFromAnsi>];String(eax)->A
※※※※※※※※※※※※※※※※※
看看!知道我要干什么了吧……××邪恶地笑着
打开vb,ASC("成"),得出结果-19511
再打开CALC,注意!!!直接把19511转成16进制,得4C37
用OD中CTRL+F查找 PUSH -4C37
^_^,怎么样
00485678 . 68 C9B3FFFF PUSH FFFFB3C9
0048567D . 51 PUSH ECX
0048567E . FFD6 CALL ESI
00485680 . 8D95 E4F2FFFF LEA EDX,DWORD PTR SS:[EBP-D1C]
00485686 . 68 A6B9FFFF PUSH FFFFB9A6
0048568B . 52 PUSH EDX
0048568C . FFD6 CALL ESI
……………………………………
向上找啊找
……(这段是我对的资料)
00485184 . DD9D ECEFFFFF FSTP QWORD PTR SS:[EBP-1014] ; [ebp-1014] <- st(0);然后再执行一次出栈操作
0048518A . 50 PUSH EAX ; 假码
0048518B . FF15 44114000 CALL DWORD PTR DS:[<&MSVBVM60.#581>] ; MSVBVM60.rtcR8ValFromBstr
00485191 . FF15 70104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpR8>>; MSVBVM60.__vbaFpR8
00485197 . DD9D D4EFFFFF FSTP QWORD PTR SS:[EBP-102C] ; 保存实数ST0到[EBP-102c],然后出栈
0048519D . DD85 ECEFFFFF FLD QWORD PTR SS:[EBP-1014] ; [ebp-1014]放入st0
004851A3 . DC05 20134000 FADD QWORD PTR DS:[401320] ; st(0) <-st(0) + [401320]
004851A9 . DFE0 FSTSW AX ; AX<- MSW
004851AB . A8 0D TEST AL,0D ; AL AND OD
004851AD . 0F85 51310000 JNZ SCG移动?00488304 ; 886
004851B3 . FF15 70104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFpR8>>; MSVBVM60.__vbaFpR8
004851B9 . DC9D D4EFFFFF FCOMP QWORD PTR SS:[EBP-102C] ; 和EBP-102C一样否?
004851BF . DFE0 FSTSW AX ; AX<- MSW
004851C1 . F6C4 40 TEST AH,40 ; 继续比较
004851C4 . 74 07 JE SHORT SCG移动?004851CD ; 886
004851C6 . B8 01000000 MOV EAX,1
004851CB . EB 02 JMP SHORT SCG移动?004851CF
004851CD > 33C0 XOR EAX,EAX
004851CF > F7D8 NEG EAX
004851D1 . 66:85C0 TEST AX,AX
004851D4 . 0F84 FC130000 JE SCG移动?004865D6
004851DA . 8B0E MOV ECX,DWORD PTR DS:[ESI]
004851DC . 56 PUSH ESI
004851DD . FF91 38030000 CALL DWORD PTR DS:[ECX+338]
最后推出结果——————————123
晕……晕了吗?……………………………………………………………………
呵呵,别着急,他还留一手呢!!!
“呵呵,不好意思,其实您没有注册成功,不过离成功很近了”…………………………
还好,有个安慰………………
来分析一下,既然之前出来过“注册成功”,那肯定在咱上次推的那个下面(就是用无赖玩法找PUSH ****,记得吧)
向下翻吧…………………………
§
§
§
§
\/
………………………………………………
………………………………………………
………………………………………………
我得出的结论居然什么都是“呵呵,不好意思,其实您没有注册成功,不过离成功很近了”…………
那就只好使出杀鸡锏——爆破
只用把00475FF9处的JMP改成RETN 8就可以了
唉~漫漫长夜,都2:47了,收工…………
明天……不,是今天晚上发帖子……………………
====================
大体是分析完了,但是各位大大的能否告诉我那个“呵呵,不好意思,其实您没有注册成功,不过离成功很近了”
的暗桩到底放在哪儿了??!!
今天太晚了,没时间找了…………
唉~我的红警,我的CS,我的PAL4(仙4)……为了破解,我光荣地牺牲了3个小时的时间
(写文章,还有以前用的爆破地方改成分析)
我鄙视这个CM,因为居然用的是浮点~~
Made By NoName剑人
2007-10-3 2:51
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课