好友
阅读权限25
听众
最后登录1970-1-1
|
本帖最后由 hjm666 于 2018-5-31 18:52 编辑
相对这个1软件比较简单
一、基础信息
软件页面:
软件有一个NAG 窗口,根据软件页面提示,需要把NAG窗口去除,然后再进行注册软件
查看下事件:
有三个需要注意的事件。。 (软件VB Decompiler )
查壳:
vb作品,无壳
二、去除NAG窗口
由于太久没有做过去除NAG这件事。。。。。
所以我选择百度一下。。。
三个事件中有个 Time 事件很可疑,于是百度之。。。发现是窗口的时间事件,同时也找到了几个适合用来去除NAG窗口的方法。
方法一:
百度知道vb Time函数有一个interval 用来控制NAG存在的时间,可以从此处入手,
想起一款用过的vb反汇编软件 vbexplorer
将interval 的值修改成很小再保存之就可以了
(吐槽下,这软件也是写的不好关了都还有进程···)
方法二:
用 hex编辑软件载入
找到这段二进制 修改030b 后面两个进制就可以 如:0100 nag窗口存在一毫秒
方法三:
由看雪论坛大佬总结的4C法,学了这个方法后我迅速去找了下出处。。。。很遗憾的是大佬并未解释这个方法的原理是什么,可能vb编写大佬一看就懂吧
原处出至:《使用OllyDbg从零开始Cracking_CHM版 》 第二十七章 (作者是谁,看雪哪个帖子我是不知道了)
《使用OllyDbg从零开始Cracking_CHM版 》 emmmmm、、、、 这个整理了看雪大神的帖子集合特别有用,给各位偷个链接:百度云盘:http://pan.baidu.com/s/1o682Hbc
VB特点是开头push OEP 然后紧跟着一个call (如不是,就是加密了), 数据窗口中跳到这个地址 (ctrl+g)
数据窗口中右键选择 : Hex - 》 16进制 Ascii 看得更直观 ,然后再 跳到 OEP 加 4c 地址 (ctrl+ g)
选中那行地址右键 数据窗口跟随 DOWRD, 可以看到两段差异不大的数据 将这两个 00 01 调换一下修改保存即可 (注:图中的是我已经修改过的)
三、暴力破解
[Asm] 纯文本查看 复制代码 00408668 . 8945 94 mov dword ptr ss:[ebp-0x6C],eax
0040866B . 894D AC mov dword ptr ss:[ebp-0x54],ecx
0040866E . 8945 A4 mov dword ptr ss:[ebp-0x5C],eax
00408671 . 894D BC mov dword ptr ss:[ebp-0x44],ecx
00408674 . 8945 B4 mov dword ptr ss:[ebp-0x4C],eax
00408677 . 74 62 je short AfKayAs_.004086DB ; 关键跳转
00408679 . 8B35 14B14000 mov esi,dword ptr ds:[<&msvbvm50.__vbaSt>; msvbvm50.__vbaStrCat
0040867F . 68 C06F4000 push AfKayAs_.00406FC0 ; UNICODE "You Get It"
00408684 . 68 DC6F4000 push AfKayAs_.00406FDC ; /String = ""
00408689 . FFD6 call esi ; \__vbaStrCat
0040868B . 8BD0 mov edx,eax
0040868D . 8D4D E8 lea ecx,dword ptr ss:[ebp-0x18]
关键跳转改标志位即可完成暴力破解
四、注册机探寻
关键事件代码太繁琐,无用代码太多 就不全部放上来了,只放关键代码
[Asm] 纯文本查看 复制代码 004081E2 . 50 push eax
004081E3 . FF15 18B14000 call dword ptr ds:[<&msvbvm50.__vbaHresu>; msvbvm50.__vbaHresultCheckObj
004081E9 > 8B95 50FFFFFF mov edx,dword ptr ss:[ebp-0xB0]
004081EF . 8B45 E4 mov eax,dword ptr ss:[ebp-0x1C] ; 用户名
004081F2 . 50 push eax ; /String = 0000000A ???
004081F3 . 8B1A mov ebx,dword ptr ds:[edx] ; |
004081F5 . FF15 F8B04000 call dword ptr ds:[<&msvbvm50.__vbaLenBs>; \_vbaLenBstr 计算字符长度
004081FB . 8BF8 mov edi,eax ; eax字符长度
004081FD . 8B4D E8 mov ecx,dword ptr ss:[ebp-0x18]
00408200 . 69FF 385B0100 imul edi,edi,0x15B38 ; edi * 15B38 -> edi
00408206 . 51 push ecx ; /String = 80020004 ???
00408207 . 0F80 B7050000 jo AfKayAs_.004087C4 ; |跳空
0040820D . FF15 0CB14000 call dword ptr ds:[<&msvbvm50.rtcAnsiVal>; \rtcAnsiValueBstr ;函数 Asc(string)
00408213 . 0FBFD0 movsx edx,ax
00408216 . 03FA add edi,edx ; 用户名首字母16进制 加 edi -> edi
00408218 . 0F80 A6050000 jo AfKayAs_.004087C4 ; 跳空
0040821E . 57 push edi ; msvbvm50.__vbaObjSet
0040821F . FF15 F4B04000 call dword ptr ds:[<&msvbvm50.__vbaStrI4>; vbaStrI4 将edi转换成10进制
00408225 . 8BD0 mov edx,eax
00408227 . 8D4D E0 lea ecx,dword ptr ss:[ebp-0x20]
0040822A . FF15 94B14000 call dword ptr ds:[<&msvbvm50.__vbaStrMo>; _vbaStrMove 字符移动
00408230 . 8BBD 50FFFFFF mov edi,dword ptr ss:[ebp-0xB0]
00408236 . 50 push eax
00408237 . 57 push edi ; msvbvm50.__vbaObjSet
00408238 . FF93 A4000000 call dword ptr ds:[ebx+0xA4]
0040823E . 85C0 test eax,eax
[Asm] 纯文本查看 复制代码 004082E9 . FF15 74B14000 call dword ptr ds:[<&msvbvm50.__vbaR8Str>; __vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
004082EF . D905 08104000 fld dword ptr ds:[0x401008] ; FLD 指令用于把浮点数字传送入和传送出FPU寄存器. 401008 =10.00000
004082F5 . 833D 00904000>cmp dword ptr ds:[0x409000],0x0
004082FC . 75 08 jnz short AfKayAs_.00408306
004082FE . D835 0C104000 fdiv dword ptr ds:[0x40100C] ; 10 /5 浮点除 40100C =5.0
00408304 . EB 0B jmp short AfKayAs_.00408311
00408306 > FF35 0C104000 push dword ptr ds:[0x40100C]
0040830C . E8 578DFFFF call <jmp.&msvbvm50._adj_fdiv_m32>
00408311 > 83EC 08 sub esp,0x8
00408314 . DFE0 fstsw ax
00408316 . A8 0D test al,0xD
00408318 . 0F85 A1040000 jnz AfKayAs_.004087BF
0040831E . DEC1 faddp st(1),st ; edi + 2 ??
00408320 . DFE0 fstsw ax
00408322 . A8 0D test al,0xD
00408324 . 0F85 95040000 jnz AfKayAs_.004087BF
0040832A . DD1C24 fstp qword ptr ss:[esp]
0040832D . FF15 48B14000 call dword ptr ds:[<&msvbvm50.__vbaStrR8>; __vbaR8Var ;转换成浮点数,结果在浮点寄存器里
00408333 . 8BD0 mov edx,eax
00408335 . 8D4D E4 lea ecx,dword ptr ss:[ebp-0x1C]
00408338 . FF15 94B14000 call dword ptr ds:[<&msvbvm50.__vbaStrMo>; _vbaStrMove 字符移动
[Asm] 纯文本查看 复制代码 004083F2 . 52 push edx
004083F3 . 8B19 mov ebx,dword ptr ds:[ecx]
004083F5 . FF15 74B14000 call dword ptr ds:[<&msvbvm50.__vbaR8Str>; __vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
004083FB . DC0D 10104000 fmul qword ptr ds:[0x401010] ; 401010 - > 3.0 ;(edi+2)*3
00408401 . 83EC 08 sub esp,0x8
00408404 . DC25 18104000 fsub qword ptr ds:[0x401018] ; 401018 -> 2 (edi+2)*3-2
0040840A . DFE0 fstsw ax
0040840C . A8 0D test al,0xD
0040840E . 0F85 AB030000 jnz AfKayAs_.004087BF
00408414 . DD1C24 fstp qword ptr ss:[esp]
00408417 . FF15 48B14000 call dword ptr ds:[<&msvbvm50.__vbaStrR8>; __vbaR8Var ;转换成浮点数,结果在浮点寄存器里
0040841D . 8BD0 mov edx,eax
0040841F . 8D4D E4 lea ecx,dword ptr ss:[ebp-0x1C]
00408422 . FF15 94B14000 call dword ptr ds:[<&msvbvm50.__vbaStrMo>; _vbaStrMove 字符移动
00408428 . 899D 2CFFFFFF mov dword ptr ss:[ebp-0xD4],ebx
0040842E . 8B9D 58FFFFFF mov ebx,dword ptr ss:[ebp-0xA8]
00408434 . 50 push eax
00408435 . 8B85 2CFFFFFF mov eax,dword ptr ss:[ebp-0xD4]
[Asm] 纯文本查看 复制代码 004084DD . 8B19 mov ebx,dword ptr ds:[ecx]
004084DF . FF15 74B14000 call dword ptr ds:[<&msvbvm50.__vbaR8Str>; __vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
004084E5 . DC25 20104000 fsub qword ptr ds:[0x401020] ; 401020 -> -15 (edi+2)*3-2-(-15)
004084EB . 83EC 08 sub esp,0x8
004084EE . DFE0 fstsw ax
004084F0 . A8 0D test al,0xD
004084F2 . 0F85 C7020000 jnz AfKayAs_.004087BF
004084F8 . DD1C24 fstp qword ptr ss:[esp]
004084FB . FF15 48B14000 call dword ptr ds:[<&msvbvm50.__vbaStrR8>; __vbaR8Var ;转换成浮点数,结果在浮点寄存器里
00408501 . 8BD0 mov edx,eax
00408503 . 8D4D E4 lea ecx,dword ptr ss:[ebp-0x1C]
00408506 . FF15 94B14000 call dword ptr ds:[<&msvbvm50.__vbaStrMo>; _vbaStrMove 字符移动
0040850C . 899D 24FFFFFF mov dword ptr ss:[ebp-0xDC],ebx
00408512 . 8B9D 58FFFFFF mov ebx,dword ptr ss:[ebp-0xA8]
00408518 . 50 push eax
00408519 . 8B85 24FFFFFF mov eax,dword ptr ss:[ebp-0xDC]
0040851F . 53 push ebx
00408520 . FF90 A4000000 call dword ptr ds:[eax+0xA4]
00408526 . 85C0 test eax,eax
00408528 . 7D 12 jge short AfKayAs_.0040853C
[Asm] 纯文本查看 复制代码 004085BC . 68 A0000000 push 0xA0
004085C1 . 68 AC6F4000 push AfKayAs_.00406FAC
004085C6 . 56 push esi
004085C7 . 50 push eax
004085C8 . FF15 18B14000 call dword ptr ds:[<&msvbvm50.__vbaHresu>; msvbvm50.__vbaHresultCheckObj
004085CE > 8B45 E8 mov eax,dword ptr ss:[ebp-0x18]
004085D1 . 50 push eax
004085D2 . FF15 74B14000 call dword ptr ds:[<&msvbvm50.__vbaR8Str>; __vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
004085D8 . 8B4D E4 mov ecx,dword ptr ss:[ebp-0x1C]
004085DB . DD9D 1CFFFFFF fstp qword ptr ss:[ebp-0xE4] ; 载入输入的序列号
004085E1 . 51 push ecx
004085E2 . FF15 74B14000 call dword ptr ds:[<&msvbvm50.__vbaR8Str>; __vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
004085E8 . 833D 00904000>cmp dword ptr ds:[0x409000],0x0
[Asm] 纯文本查看 复制代码 00408665 . 66:85F6 test si,si ; 改变标志位
00408668 . 8945 94 mov dword ptr ss:[ebp-0x6C],eax
0040866B . 894D AC mov dword ptr ss:[ebp-0x54],ecx
0040866E . 8945 A4 mov dword ptr ss:[ebp-0x5C],eax
00408671 . 894D BC mov dword ptr ss:[ebp-0x44],ecx
00408674 . 8945 B4 mov dword ptr ss:[ebp-0x4C],eax
00408677 . 74 62 je short AfKayAs_.004086DB ; 关键跳转
00408679 . 8B35 14B14000 mov esi,dword ptr ds:[<&msvbvm50.__vbaSt>; msvbvm50.__vbaStrCat
0040867F . 68 C06F4000 push AfKayAs_.00406FC0 ; UNICODE "You Get It"
00408684 . 68 DC6F4000 push AfKayAs_.00406FDC ; /String = ""
00408689 . FFD6 call esi ; \__vbaStrCat
0040868B . 8BD0 mov edx,eax
0040868D . 8D4D E8 lea ecx,dword ptr ss:[ebp-0x18]
00408690 . FF15 94B14000 call dword ptr ds:[<&msvbvm50.__vbaStrMo>; msvbvm50.__vbaStrMove
00408696 . 50 push eax
总结一下:
取用户名的长度*15B38 + 取用户名第一个字符的16进制 结果转换成10进制 ,再转换成浮点数 进行了 +2 *3 -2 -(-15) 一系列操作
注册机:
[C] 纯文本查看 复制代码 #include<stdio.h>
#include<string.h>
#include<iostream>
int main()
{
int len,key;
char name[50]={0};
printf("Input yous name:\n");
scanf("%s",&name);
len=strlen(name);
key=4*88888+name[0]+2; // 15B38 -> 88888
key=key*3-2-(-15);
printf("The key is:\n");
printf("%d\n",key);
system("pause");
return 0;
}
就此完结,总的说比较简单
如有错误,还请大佬指出,不胜感激!!!
|
免费评分
-
查看全部评分
|