首页
社区
课程
招聘
脑筋急转弯2005语音朗读特别版爆破
发表于: 2005-12-1 18:06 4561

脑筋急转弯2005语音朗读特别版爆破

2005-12-1 18:06
4561
脑筋急转弯2005语音朗读特别版
未注册1次只能看5次答案
工具:修改版ollydbg 金山游侠 aspackdie VBExplorer
语言是vb5+p-code,注册采用计算和网络验证,只有爆破,将限制去除。
该软件会检测程序标题,如果发现有某些程序的话就会关机,你可以在运行中输入 shutdown.exe -a 解决。
会不会因为这篇文章连金山游侠也检测吧,^_^。
软件有自校验,aspackdie脱壳后,VBExplorer编辑字符串中的程序黑名单为任意随机字符,用修改版ollydbg载入,向上翻代码,有许多函数:
00401000    .- FF25 0C914300   jmp dword ptr ds:[<&MSVBVM50.DllFunc>;  MSVBVM50.DllFunctionCall
00401006    .- FF25 3C914300   jmp dword ptr ds:[<&MSVBVM50.#681>]  ;  MSVBVM50.rtcImmediateIf
0040100C    .- FF25 48914300   jmp dword ptr ds:[<&MSVBVM50.#578>]  ;  MSVBVM50.rtcFileLen
00401012    .- FF25 E4904300   jmp dword ptr ds:[<&MSVBVM50.#595>]  ;  MSVBVM50.rtcMsgBox
00401018    .- FF25 00914300   jmp dword ptr ds:[<&MSVBVM50.#526>]  ;  MSVBVM50.rtcSpaceVar
0040101E    .- FF25 58914300   jmp dword ptr ds:[<&MSVBVM50.#617>]  ;  MSVBVM50.rtcLeftCharVar
00401024    .- FF25 5C914300   jmp dword ptr ds:[<&MSVBVM50.#618>]  ;  MSVBVM50.rtcRightCharBstr
0040102A    .- FF25 34914300   jmp dword ptr ds:[<&MSVBVM50.#645>]  ;  MSVBVM50.rtcDir
00401030    .- FF25 20914300   jmp dword ptr ds:[<&MSVBVM50.#608>]  ;  MSVBVM50.rtcVarBstrFromAnsi
00401036    .- FF25 64914300   jmp dword ptr ds:[<&MSVBVM50.#580>]  ;  MSVBVM50.rtcSetFileAttr
0040103C    .- FF25 40914300   jmp dword ptr ds:[<&MSVBVM50.#576>]  ;  MSVBVM50.rtcFileCopy
00401042    .- FF25 08914300   jmp dword ptr ds:[<&MSVBVM50.#529>]  ;  MSVBVM50.rtcKillFiles
00401048    .- FF25 68914300   jmp dword ptr ds:[<&MSVBVM50.#581>]  ;  MSVBVM50.rtcR8ValFromBstr
0040104E    .- FF25 50914300   jmp dword ptr ds:[<&MSVBVM50.#613>]  ;  MSVBVM50.rtcVarStrFromVar
00401054    .- FF25 F8904300   jmp dword ptr ds:[<&MSVBVM50.#631>]  ;  MSVBVM50.rtcMidCharBstr
0040105A    .- FF25 44914300   jmp dword ptr ds:[<&MSVBVM50.#685>]  ;  MSVBVM50.rtcErrObj
00401060    .- FF25 38914300   jmp dword ptr ds:[<&MSVBVM50.#571>]  ;  MSVBVM50.rtcEndOfFile
00401066    .- FF25 DC904300   jmp dword ptr ds:[<&MSVBVM50.#593>]  ;  MSVBVM50.rtcRandomNext
0040106C    .- FF25 E0904300   jmp dword ptr ds:[<&MSVBVM50.#594>]  ;  MSVBVM50.rtcRandomize
00401072    .- FF25 EC904300   jmp dword ptr ds:[<&MSVBVM50.#520>]  ;  MSVBVM50.rtcTrimVar
00401078    .- FF25 D4904300   jmp dword ptr ds:[<&MSVBVM50.#516>]  ;  MSVBVM50.rtcAnsiValueBstr
0040107E    .- FF25 2C914300   jmp dword ptr ds:[<&MSVBVM50.#536>]  ;  MSVBVM50.rtcStrFromVar
00401084    .- FF25 60914300   jmp dword ptr ds:[<&MSVBVM50.#619>]  ;  MSVBVM50.rtcRightCharVar
0040108A    .- FF25 FC904300   jmp dword ptr ds:[<&MSVBVM50.#525>]  ;  MSVBVM50.rtcSpaceBstr
00401090    .- FF25 F4904300   jmp dword ptr ds:[<&MSVBVM50.#524>]  ;  MSVBVM50.rtcRightTrimVar
00401096    .- FF25 30914300   jmp dword ptr ds:[<&MSVBVM50.#537>]  ;  MSVBVM50.rtcBstrFromAnsi
0040109C    .- FF25 54914300   jmp dword ptr ds:[<&MSVBVM50.#616>]  ;  MSVBVM50.rtcLeftCharBstr
004010A2    .- FF25 D0904300   jmp dword ptr ds:[<&MSVBVM50.#622>]  ;  MSVBVM50.rtcStrConvVar
004010A8    .- FF25 24914300   jmp dword ptr ds:[<&MSVBVM50.#531>]  ;  MSVBVM50.rtcMakeDir
004010AE    .- FF25 14914300   jmp dword ptr ds:[<&MSVBVM50.#600>]  ;  MSVBVM50.rtcShell
004010B4    .- FF25 D8904300   jmp dword ptr ds:[<&MSVBVM50.#517>]  ;  MSVBVM50.rtcLowerCaseBstr
004010BA    .- FF25 1C914300   jmp dword ptr ds:[<&MSVBVM50.__vbaEx>;  MSVBVM50.__vbaExceptHandler
004010C0    .- FF25 18914300   jmp dword ptr ds:[<&MSVBVM50.EVENT_S>;  MSVBVM50.EVENT_SINK_QueryInterface
004010C6    .- FF25 04914300   jmp dword ptr ds:[<&MSVBVM50.EVENT_S>;  MSVBVM50.EVENT_SINK_AddRef
004010CC    .- FF25 10914300   jmp dword ptr ds:[<&MSVBVM50.EVENT_S>;  MSVBVM50.EVENT_SINK_Release
004010D2    .- FF25 CC904300   jmp dword ptr ds:[<&MSVBVM50.MethCal>;  MSVBVM50.MethCallEngine
004010D8    .- FF25 28914300   jmp dword ptr ds:[<&MSVBVM50.ProcCal>;  MSVBVM50.ProcCallEngine
004010DE    .- FF25 E8904300   jmp dword ptr ds:[<&MSVBVM50.#303>]  ;  MSVBVM50.GetMemStr
004010E4    .- FF25 F0904300   jmp dword ptr ds:[<&MSVBVM50.#309>]  ;  MSVBVM50.PutMemStr
004010EA    $- FF25 4C914300   jmp dword ptr ds:[<&MSVBVM50.#100>]  ;  MSVBVM50.ThunRTMain
004010F0 h>/$  68 F4EB4000     push hynj.0040EBF4
如上,都是程序用到的函数,在下面下断:
0040100C    .- FF25 48914300   jmp dword ptr ds:[<&MSVBVM50.#578>]  ;  MSVBVM50.rtcFileLen
按一下F9中断在检查dll文件上,第二下F9时中断在检查程序长度上,F8开始:
74056192 M>  81EC 40010000     sub esp,140
74056198     8D4424 00         lea eax,dword ptr ss:[esp]
7405619C     50                push eax
7405619D     FFB424 48010000   push dword ptr ss:[esp+148]
740561A4     E8 15000000       call MSVBVM50.740561BE
740561A9     85C0              test eax,eax
740561AB     0F85 B90F0400     jnz MSVBVM50.7409716A
740561B1     8B4424 20         mov eax,dword ptr ss:[esp+20]    取得程序长度
740561B5     81C4 40010000     add esp,140
740561BB     C2 0400           retn 4                           返回
返回这里:
7411E7F2     3BFC              cmp edi,esp
7411E7F4     0F85 2B790000     jnz MSVBVM50.74126125
7411E7FA     50                push eax
7411E7FB     33C0              xor eax,eax
7411E7FD     8A06              mov al,byte ptr ds:[esi]
7411E7FF     46                inc esi
7411E800     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94] 跳走
跳到这里:
7411DE28     8B06              mov eax,dword ptr ds:[esi]        eax=004314FB处的数据值(程序设置的固定值)278D0
7411DE2A     50                push eax
7411DE2B     33C0              xor eax,eax
7411DE2D     8A46 04           mov al,byte ptr ds:[esi+4]
7411DE30     83C6 05           add esi,5
7411DE33     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94] 跳走
跳到这里:
7411EB5D     5A                pop edx
7411EB5E     59                pop ecx
7411EB5F     3BCA              cmp ecx,edx                       比较文件长度和程序设定的固定值如果大于就……嘿嘿
7411EB61     B8 00000000       mov eax,0
7411EB66     0F9FC0            setg al
7411EB69     F7D8              neg eax
7411EB6B     50                push eax
7411EB6C     33C0              xor eax,eax
7411EB6E     8A06              mov al,byte ptr ds:[esi]
7411EB70     46                inc esi
7411EB71     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]
重新载入,在cpu窗口,ctrl+G 输入:004314FB  回车,来到下面:
004314FB       D078 02       sar byte ptr ds:[eax+2],1
004314FE       00DB          add bl,bl
选中以上2行,鼠标右键 二进制――编辑 ,由于计算机从低位到高位保存数据,因此在最下面HEX +00窗口看到如下数据:
D0 78 02 00 DB      其中前6个字符表示前面看到的程序设定值:0278D0,利用第7和第8位都是0,改为D0 78 02 01 DB
这下,程序设定值变成10278D0,完全比脱壳后的长度数值大。
以上为启动时的检查,在升级时还有,解决方法一样,就不重复了。

解决了自校验,再看次数限制:
用金山游侠得次数地址:157C90
在右下角数据窗口ctrl+G 输入:157C90  回车,在157C90上下内存访问断点,在程序任选一题,点看答案,中断到下面,取消内存断点。
7412565E     8B7D B4           mov edi,dword ptr ss:[ebp-4C]
74125661     0FB706            movzx eax,word ptr ds:[esi]
74125664     8F0438            pop dword ptr ds:[eax+edi]           内存中断在这里
74125667     33C0              xor eax,eax
74125669     8A46 02           mov al,byte ptr ds:[esi+2]
7412566C     83C6 03           add esi,3
7412566F     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]    跳

7411D39E     8975 EC           mov dword ptr ss:[ebp-14],esi
7411D3A1     33C0              xor eax,eax
7411D3A3     8A46 01           mov al,byte ptr ds:[esi+1]
7411D3A6     83C6 02           add esi,2
7411D3A9     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]    再跳

7411E3D0     0FBF06            movsx eax,word ptr ds:[esi]
7411E3D3     83C6 02           add esi,2
7411E3D6     8B0428            mov eax,dword ptr ds:[eax+ebp]
7411E3D9     0BC0              or eax,eax
7411E3DB     0F84 34760000     je MSVBVM50.74125A15
7411E3E1     8945 B4           mov dword ptr ss:[ebp-4C],eax
7411E3E4     33C0              xor eax,eax
7411E3E6     8A06              mov al,byte ptr ds:[esi]
7411E3E8     46                inc esi
7411E3E9     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]    再跳

7411E113     8B7D B4           mov edi,dword ptr ss:[ebp-4C]
7411E116     0FB706            movzx eax,word ptr ds:[esi]
7411E119     FF3438            push dword ptr ds:[eax+edi]
7411E11C     33C0              xor eax,eax
7411E11E     8A46 02           mov al,byte ptr ds:[esi+2]
7411E121     83C6 03           add esi,3
7411E124     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]

7411DE28     8B06              mov eax,dword ptr ds:[esi]            赋固定值:eax=6
7411DE2A     50                push eax
7411DE2B     33C0              xor eax,eax
7411DE2D     8A46 04           mov al,byte ptr ds:[esi+4]
7411DE30     83C6 05           add esi,5
7411DE33     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]     再跳

7411EA7C     5A                pop edx                              
7411EA7D     58                pop eax
7411EA7E     2BC2              sub eax,edx                           eax=eax-edx
7411EA80     83F8 01           cmp eax,1                             比较eax是否是1
7411EA83     1BC0              sbb eax,eax
7411EA85     50                push eax
7411EA86     33C0              xor eax,eax
7411EA88     8A06              mov al,byte ptr ds:[esi]
7411EA8A     46                inc esi
7411EA8B     FF2485 94ED1174   jmp dword ptr ds:[eax*4+7411ED94]

解决方法:
把7411DE28     8B06              mov eax,dword ptr ds:[esi]        赋固定值:eax=题目数量+1
在7411DE28处看到
ds:[004328B8]=00000006               就是这里了。
eax=000000F5
在cpu窗口,ctrl+G 输入:004328B8  回车,来到下面:
004328B6       03              db 03
004328B7       F5              db F5
004328B8       06              push es
004328B9       0000            add byte ptr ds:[eax],al
004328BB       00C7            add bh,al

可以看到004328B8处为6,004328B9处为0000,正好可以利用,用鼠标选中这2行,点右键,二进制――编辑
060000 改成 780600 (题目数量1655+1=1656,16进制:678)或者直接改成FFFFFF。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
2005-12-2 03:23
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
hao dong dong .马上试试!
2005-12-2 20:18
0
游客
登录 | 注册 方可回帖
返回
//