TA的每日心情 | 慵懒 2019-2-17 18:27 |
---|
签到天数: 33 天 [LV.5]常住居民I
|
发表于 2008-3-21 10:22:36
|
显示全部楼层
【文章标题】: 命中双色球本地验证分析
【文章作者】: yingfeng
【作者主页】: bbs.chinapyg.com
【作者QQ号】: 反正不会是123456
【软件名称】: 命中双色球
【下载地址】: 自己搜索下载
【加壳方式】: 无壳
【保护方式】: 本地验证、网络验证、重启验证
【使用工具】: OD
【操作平台】: WinXP sp3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
因为是VB的程序,可以用VB-Explorer找注册按钮事件
当然你也可根据错误码的对话框提示,下断或其它方法。
00621ADE > \55 push ebp ; 注册按钮事件断下
00621BEA . E8 1954DEFF call <jmp.&MSVBVM60.__vbaFreeVarList>
00621BEF . 83C4 0C add esp, 0C
00621BF2 . FF75 E4 push dword ptr [ebp-1C] ; /String
00621BF5 . E8 A652DEFF call <jmp.&MSVBVM60.__vbaLenBstr> ; \__vbaLenBstr
00621BFA . 83F8 0F cmp eax, 0F
00621BFD . 0F84 9F000000 je 00621CA2 ; 这里实现假码的长度比较是否为15位,要跳*****
00621C03 . C745 84 04000>mov dword ptr [ebp-7C], 80020004
00621C0A . C785 7CFFFFFF>mov dword ptr [ebp-84], 0A
00621C14 . C745 94 04000>mov dword ptr [ebp-6C], 80020004
00621C1B . C745 8C 0A000>mov dword ptr [ebp-74], 0A
00621C22 . C785 24FFFFFF>mov dword ptr [ebp-DC], 00435F90 ; ASCII "蚫\O衏:y"
00621C2C . C785 1CFFFFFF>mov dword ptr [ebp-E4], 8
00621F35 . 8D45 8C lea eax, dword ptr [ebp-74]
00621F38 . 50 push eax
00621F39 . 8D45 9C lea eax, dword ptr [ebp-64]
00621F3C . 50 push eax
00621F3D . 8D45 AC lea eax, dword ptr [ebp-54]
00621F40 . 50 push eax
00621F41 . 6A 08 push 8
00621F43 . E8 C050DEFF call <jmp.&MSVBVM60.__vbaFreeVarList>
00621F48 . 83C4 24 add esp, 24
00621F4B . 0FBF85 B8FEFF>movsx eax, word ptr [ebp-148]
00621F52 . 85C0 test eax, eax
00621F54 . 0F84 9F000000 je 00621FF9 ; 这里即是比较所有的字符(机器码跟注册码)是不是特殊的符号
同样要跳过。
00621FFE > \66:837D E8 0E cmp word ptr [ebp-18], 0E ; 这里又是进行长度比较是否少于15位,小于就OVER了***********
00622003 . 0F8E 89050000 jle 00622592
00622009 . 66:C785 A4FEF>mov word ptr [ebp-15C], 0F ; 这里把F入EBP-15C
00622012 . 66:C785 A8FEF>mov word ptr [ebp-158], 1 ; 这里把1入EBP-158
0062201B . 66:C745 E8 01>mov word ptr [ebp-18], 1 ; 这里把1入EBP-18
00622021 . EB 15 jmp short 00622038
00622023 > 66:8B45 E8 mov ax, word ptr [ebp-18]
00622027 . 66:0385 A8FEF>add ax, word ptr [ebp-158]
0062202E . 0F80 9A060000 jo 006226CE
00622034 . 66:8945 E8 mov word ptr [ebp-18], ax ; 这是AX为计数器,进行循环计算
00622038 > 66:8B45 E8 mov ax, word ptr [ebp-18] ; 这里是1入AX,开始都从第1位开始
0062203C . 66:3B85 A4FEF>cmp ax, word ptr [ebp-15C] ; 这里比较是否大于F
00622043 . 0F8F 57020000 jg 006222A0 ; 大于则跳走
00622049 . C745 B4 01000>mov dword ptr [ebp-4C], 1 ; 把1入EBP-4C
00622050 . C745 AC 02000>mov dword ptr [ebp-54], 2 ; 把2入EBP-54
00622057 . C785 34FFFFFF>mov dword ptr [ebp-CC], 0066DA28 ; 0066DA28(6740520)
00622061 . C785 2CFFFFFF>mov dword ptr [ebp-D4], 4008
0062206B . 8D45 AC lea eax, dword ptr [ebp-54]
0062206E . 50 push eax ; /Length8
0062206F . 0FBF45 E8 movsx eax, word ptr [ebp-18] ; |这里是计数器I
00622073 . 50 push eax ; |Start
00622074 . 8D85 2CFFFFFF lea eax, dword ptr [ebp-D4] ; |这里是4008
0062207A . 50 push eax ; |dString8
0062207B . 8D45 9C lea eax, dword ptr [ebp-64] ; |这里是字符串
0062207E . 50 push eax ; |RetBUFFER
0062207F . E8 3A4EDEFF call <jmp.&MSVBVM60.#632> ; \rtcMidCharVar
00622084 . 8D45 9C lea eax, dword ptr [ebp-64]
00622087 . 50 push eax ; /String8
00622088 . 8D45 CC lea eax, dword ptr [ebp-34] ; |
0062208B . 50 push eax ; |ARG2
0062208C . E8 034EDEFF call <jmp.&MSVBVM60.__vbaStrVarVal> ; \__vbaStrVarVal
00622091 . 50 push eax ; /String
00622092 . E8 DF4DDEFF call <jmp.&MSVBVM60.#516> ; \rtcAnsiValueBstr
00622097 . 66:8945 DC mov word ptr [ebp-24], ax ; 这里进行为48即48H
0062209B . 8D4D CC lea ecx, dword ptr [ebp-34] ; 上面的CALL意思是把机器码的每位ASCII码取出*******
0062209E . E8 0B4FDEFF call <jmp.&MSVBVM60.__vbaFreeStr>
006220A3 . 8D45 9C lea eax, dword ptr [ebp-64]
006220A6 . 50 push eax
006220A7 . 8D45 AC lea eax, dword ptr [ebp-54]
006220AA . 50 push eax
006220AB . 6A 02 push 2
006220AD . E8 564FDEFF call <jmp.&MSVBVM60.__vbaFreeVarList> ; 记为A
006220B2 . 83C4 0C add esp, 0C
006220B5 . C745 B4 01000>mov dword ptr [ebp-4C], 1
006220BC . C745 AC 02000>mov dword ptr [ebp-54], 2
006220C3 . 8D45 E4 lea eax, dword ptr [ebp-1C]
006220C6 . 8985 34FFFFFF mov dword ptr [ebp-CC], eax
006220CC . C785 2CFFFFFF>mov dword ptr [ebp-D4], 4008
006220D6 . 8D45 AC lea eax, dword ptr [ebp-54]
006220D9 . 50 push eax ; /Length8
006220DA . 0FBF45 E8 movsx eax, word ptr [ebp-18] ; |
006220DE . 50 push eax ; |Start
006220DF . 8D85 2CFFFFFF lea eax, dword ptr [ebp-D4] ; |
006220E5 . 50 push eax ; |dString8
006220E6 . 8D45 9C lea eax, dword ptr [ebp-64] ; |
006220E9 . 50 push eax ; |RetBUFFER
006220EA . E8 CF4DDEFF call <jmp.&MSVBVM60.#632> ; \rtcMidCharVar
006220EF . 8D45 9C lea eax, dword ptr [ebp-64]
006220F2 . 50 push eax ; /String8
006220F3 . 8D45 CC lea eax, dword ptr [ebp-34] ; |
006220F6 . 50 push eax ; |ARG2
006220F7 . E8 984DDEFF call <jmp.&MSVBVM60.__vbaStrVarVal> ; \__vbaStrVarVal
006220FC . 50 push eax ; /String
006220FD . E8 744DDEFF call <jmp.&MSVBVM60.#516> ; \rtcAnsiValueBstr
00622102 . 66:8945 D8 mov word ptr [ebp-28], ax ; 这上面即是把注册码的每位ASCI码计算出来***********
00622106 . 8D4D CC lea ecx, dword ptr [ebp-34] ; B
00622109 . E8 A04EDEFF call <jmp.&MSVBVM60.__vbaFreeStr>
0062210E . 8D45 9C lea eax, dword ptr [ebp-64]
00622111 . 50 push eax
00622112 . 8D45 AC lea eax, dword ptr [ebp-54]
00622115 . 50 push eax
00622116 . 6A 02 push 2
00622118 . E8 EB4EDEFF call <jmp.&MSVBVM60.__vbaFreeVarList>
0062211D . 83C4 0C add esp, 0C
00622120 . 66:837D DC 30 cmp word ptr [ebp-24], 30 ; 这里比较机器码每位是否为30
00622125 . 7C 1B jl short 00622142
00622127 . 66:837D DC 39 cmp word ptr [ebp-24], 39 ; 这里比较是否为39
0062212C . 7F 14 jg short 00622142
0062212E . 66:8B45 DC mov ax, word ptr [ebp-24] ; 如机器码是0-9之间,则机器码的ASCII码-30
00622132 . 66:2D 3000 sub ax, 30
00622136 . 0F80 92050000 jo 006226CE
0062213C . 66:8945 DC mov word ptr [ebp-24], ax
00622140 . EB 20 jmp short 00622162
00622142 > 66:837D DC 41 cmp word ptr [ebp-24], 41 ; 如机器码不为0-9的数字,则-37
00622147 . 7C 19 jl short 00622162
00622149 . 66:837D DC 5A cmp word ptr [ebp-24], 5A
0062214E . 7F 12 jg short 00622162
00622150 . 66:8B45 DC mov ax, word ptr [ebp-24] ; 这里为机器码的每一位
00622154 . 66:2D 3700 sub ax, 37 ; 机器码第一位的ASCII码-37
00622158 . 0F80 70050000 jo 006226CE
0062215E . 66:8945 DC mov word ptr [ebp-24], ax ;
00622162 > 66:837D D8 30 cmp word ptr [ebp-28], 30 ; 这里跟注册码的第一位比较是否为0-9
00622167 . 7C 1B jl short 00622184
00622169 . 66:837D D8 39 cmp word ptr [ebp-28], 39
0062216E . 7F 14 jg short 00622184
00622170 . 66:8B45 D8 mov ax, word ptr [ebp-28] ; 这里是注册码的每1位的ASCII码
00622174 . 66:2D 3000 sub ax, 30 ; 这里把注册码的每一位-30,
00622178 . 0F80 50050000 jo 006226CE
0062217E . 66:8945 D8 mov word ptr [ebp-28], ax
00622182 . EB 20 jmp short 006221A4
00622184 > 66:837D D8 41 cmp word ptr [ebp-28], 41
00622189 . 7C 19 jl short 006221A4
0062218B . 66:837D D8 5A cmp word ptr [ebp-28], 5A
00622190 . 7F 12 jg short 006221A4
00622192 . 66:8B45 D8 mov ax, word ptr [ebp-28]
00622196 . 66:2D 3700 sub ax, 37
0062219A . 0F80 2E050000 jo 006226CE
006221A0 . 66:8945 D8 mov word ptr [ebp-28], ax
006221A4 > 66:8B45 D8 mov ax, word ptr [ebp-28] ; 这里是上面的结果保存到AX中
006221A8 . 66:05 4800 add ax, 48 ;
006221AC . 0F80 1C050000 jo 006226CE
006221B2 . 66:2B45 E8 sub ax, word ptr [ebp-18] ; AX=AX-I(I为位)
006221B6 . 0F80 12050000 jo 006226CE
006221BC . 66:2B45 DC sub ax, word ptr [ebp-24]
006221C0 . 0F80 08050000 jo 006226CE
006221C6 . 66:99 cwd
006221C8 . 66:B9 2400 mov cx, 24 ; 把24放到CX中
006221CC . 66:F7F9 idiv cx ; 这里是上面的结果除24
006221CF . 0FBFC2 movsx eax, dx ; 把余数保存在EAX中
006221D2 . 8945 D0 mov dword ptr [ebp-30], eax ; 再把入EBP-30中
006221D5 . 837D D0 09 cmp dword ptr [ebp-30], 9 ; 比较余数是否少于等于9
006221D9 . 7E 61 jle short 0062223C ; 如小于则跳向另位处理
006221DB . 8B45 D4 mov eax, dword ptr [ebp-2C]
006221DE . 8985 34FFFFFF mov dword ptr [ebp-CC], eax
006221E4 . C785 2CFFFFFF>mov dword ptr [ebp-D4], 8 ;
006221EE . 8B45 D0 mov eax, dword ptr [ebp-30] ; 这里是上次计数的余数
006221F1 . 83C0 37 add eax, 37 ; 余数加上37
006221F4 . 0F80 D4040000 jo 006226CE
006221FA . 50 push eax
006221FB . 8D45 AC lea eax, dword ptr [ebp-54]
006221FE . 50 push eax
006221FF . E8 644EDEFF call <jmp.&MSVBVM60.#608> ; 这里是把上面的结果转换成字符
00622204 . 8D85 2CFFFFFF lea eax, dword ptr [ebp-D4]
0062220A . 50 push eax
0062220B . 8D45 AC lea eax, dword ptr [ebp-54]
0062220E . 50 push eax
0062220F . 8D45 9C lea eax, dword ptr [ebp-64]
00622212 . 50 push eax
00622213 . E8 AC4CDEFF call <jmp.&MSVBVM60.__vbaVarCat> ; 这里是把字符连结起来
00622218 . 50 push eax
00622219 . E8 D64CDEFF call <jmp.&MSVBVM60.__vbaStrVarMove>
0062221E . 8BD0 mov edx, eax
00622220 . 8D4D D4 lea ecx, dword ptr [ebp-2C]
00622223 . E8 CE4DDEFF call <jmp.&MSVBVM60.__vbaStrMove>
00622228 . 8D45 9C lea eax, dword ptr [ebp-64]
0062222B . 50 push eax
0062222C . 8D45 AC lea eax, dword ptr [ebp-54]
0062222F . 50 push eax
00622230 . 6A 02 push 2
00622232 . E8 D14DDEFF call <jmp.&MSVBVM60.__vbaFreeVarList>
00622237 . 83C4 0C add esp, 0C
0062223A . EB 5F jmp short 0062229B
0062223C > 8B45 D4 mov eax, dword ptr [ebp-2C] ; 这里是上面分支处理,小于9 时
0062223F . 8985 34FFFFFF mov dword ptr [ebp-CC], eax
00622245 . C785 2CFFFFFF>mov dword ptr [ebp-D4], 8
0062224F . 8B45 D0 mov eax, dword ptr [ebp-30]
00622252 . 83C0 30 add eax, 30 ; +30
00622255 . 0F80 73040000 jo 006226CE
0062225B . 50 push eax
0062225C . 8D45 AC lea eax, dword ptr [ebp-54]
0062225F . 50 push eax
00622260 . E8 034EDEFF call <jmp.&MSVBVM60.#608> ; 转换成字符
00622265 . 8D85 2CFFFFFF lea eax, dword ptr [ebp-D4]
0062226B . 50 push eax
0062226C . 8D45 AC lea eax, dword ptr [ebp-54]
0062226F . 50 push eax
00622270 . 8D45 9C lea eax, dword ptr [ebp-64]
00622273 . 50 push eax
00622274 . E8 4B4CDEFF call <jmp.&MSVBVM60.__vbaVarCat> ; 字符连接
00622279 . 50 push eax
0062227A . E8 754CDEFF call <jmp.&MSVBVM60.__vbaStrVarMove>
0062227F . 8BD0 mov edx, eax
00622281 . 8D4D D4 lea ecx, dword ptr [ebp-2C]
00622284 . E8 6D4DDEFF call <jmp.&MSVBVM60.__vbaStrMove>
00622289 . 8D45 9C lea eax, dword ptr [ebp-64]
0062228C . 50 push eax
0062228D . 8D45 AC lea eax, dword ptr [ebp-54]
00622290 . 50 push eax
00622291 . 6A 02 push 2
00622293 . E8 704DDEFF call <jmp.&MSVBVM60.__vbaFreeVarList>
00622298 . 83C4 0C add esp, 0C
0062229B >^ E9 83FDFFFF jmp 00622023
006222A0 > 8D45 D4 lea eax, dword ptr [ebp-2C]
006222A3 . 8985 34FFFFFF mov dword ptr [ebp-CC], eax
006222A9 . C785 2CFFFFFF>mov dword ptr [ebp-D4], 4008
006222B3 . 8D85 2CFFFFFF lea eax, dword ptr [ebp-D4]
006222B9 . 50 push eax
006222BA . E8 B34CDEFF call <jmp.&MSVBVM60.#561> ; 这个CALL*********,如果上面算出来的结果不是整数
006222BF . 0FBFC0 movsx eax, ax 那么就OVER了
006222C2 . 85C0 test eax, eax ;
006222C4 . 0F85 9F000000 jnz 00622369****************(这里也要跳走)
00622369 > \FF75 D4 push dword ptr [ebp-2C]
0062236C E8 174BDEFF call <jmp.&MSVBVM60.__vbaI4Str> ; 如果上面计算的不溢出,且都是数字,那么这个CALL就正常,否则你会卡死在这
00622371 . A3 64D16600 mov dword ptr [66D164], eax
00622376 . 66:C785 9CFEF>mov word ptr [ebp-164], 0F 则会提出溢出
0062237F . 66:C785 A0FEF>mov word ptr [ebp-160], 1
00622388 . 66:C745 E8 01>mov word ptr [ebp-18], 1
0062238E . EB 15 jmp short 006223A5
00622390 > 66:8B45 E8 mov ax, word ptr [ebp-18]
00622394 . 66:0385 A0FEF>add ax, word ptr [ebp-160]
然后你就可以配全合F8跟F4很快到
006224DA . 6A 00 push 0
006224DC . 8D45 AC lea eax, dword ptr [ebp-54]
006224DF . 50 push eax
006224E0 . E8 514ADEFF call <jmp.&MSVBVM60.#595> ; 这里第一步成功对话框
006224E5 . 8D85 7CFFFFFF lea eax, dword ptr [ebp-84]
006224EB . 50 push eax
总结:
机器码为取标准的取硬盘指纹的,如果不足15位,则前面+H0000凑足15位,没有分析(猜的)
把i 作为一个常量
begin
FOR I := 1 to length(注册码长度或机器码长度)
依次取出机器码的每位ASCII码
A:=MID(机器码,I,1)
IF A NOT IN(0-9) THEN
A:=A-37(如果机器码的ASCII码为0-9之间,则减去37)
ELSE
A:=A-30 (反之则减去30)
END
依次取出注册码的每位ASCII码
B:=MID(注册码,I,1)
if b not in(0-9) then(如果不是0-9的数字)
b:=b-37 -37
else
b:=b-30 如果是0-9则-30
end
f:=b+48-i +48-位置
g:=f-A g=注册码计算结果-机器码计算结果
cx:=24 常量CONST
h:=g mod 24(取余数)
if h <=9 then(是否少于等于9)
h:=h+30 (分支处理)
else
h:=h+37 (分支处理)
最后把h转换成字符边接输出,结果要不能溢出,且都为数字!
呵呵!!!!!未完,先把本地验证分析了,网络验证没啥讲的,主要是重启验证,抽个时间
也整理下,侍续………………
--------------------------------------------------------------------------------
【版权声明】: 本文原创于PYG技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年03月21日 2204:25 |
评分
-
查看全部评分
|