-
您的位置:首页 → 精文荟萃 → 破解文章 → Assistant破解笔记
Assistant破解笔记
时间:2004/10/15 0:58:00来源:本站整理作者:蓝点我要评论(0)
-
【下载页面】:http://www.wbj2000.com/
【软件大小】:364 KB
【应用平台】:WIN9X/WINNT/WIN2K/WINXP
【软件限制】:30天试用期!
【作者声明】:本人发表这篇文章只是为了学习!!!请不用于商业用途或是将本文方法制作的注册机任意传播,读者看了文章后所做的事情与我无关,我也不会负责,请读者看了文章后三思而后行!最后希望大家在经济基础好的时候,支持共享软件!
【破解工具】:TRW2K w32Dasm PEiD
—————————————————————————————————
【过 程】:
PEiD侦察出主程序Assistant.exe没有加壳!
用w32Dasm反汇编后,查找参考字串很快就找到关键!
运行主程序Assistant.exe-->提示注册-->输入用户名(用户名要大于5位)Yock[DFCG]-->注册码48484848
启动TRW2K动态跟踪!ctrl+n呼出-->下断点bpx 41BD29-->F5返回-->点注册来到下面!
:0041BD29 FFD5 call ebp \\取得用户名的长度!
:0041BD2B 8B4E14 mov ecx, dword ptr [esi+14]
:0041BD2E 53 push ebx
:0041BD2F 6A10 push 00000010
:0041BD31 6A0D push 0000000D
:0041BD33 682C040000 push 0000042C
:0041BD38 51 push ecx
:0041BD39 FFD5 call ebp \\取得注册码的长度!
:0041BD3B 8BBC2418010000 mov edi, dword ptr [esp+00000118]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041BCF9(C)
|
:0041BD42 8D9E80010000 lea ebx, dword ptr [esi+00000180]
:0041BD48 53 push ebx \\DEBX可以看到我输入的注册码!
:0041BD49 E81F0F0000 call 0041CC6D \\不算太重要,我个人觉得完全是多余的!
:0041BD4E 8B150C8A4200 mov edx, dword ptr [00428A0C]
:0041BD54 8DAE80000000 lea ebp, dword ptr [esi+00000080]
:0041BD5A 53 push ebx \\DEBP可以看见我输入的用户名!
:0041BD5B 55 push ebp
:0041BD5C 6A08 push 00000008
:0041BD5E 52 push edx
:0041BD5F E80CEAFFFF call 0041A770 \\关键CALL,F8追进去!!!
:0041BD64 A38C2E4300 mov dword ptr [00432E8C], eax
:0041BD69 8B4E18 mov ecx, dword ptr [esi+18]
:0041BD6C 83C414 add esp, 00000014
:0041BD6F 83F903 cmp ecx, 00000003
:0041BD72 7525 jne 0041BD99 \\跳向成功处!
:0041BD74 85C0 test eax, eax
:0041BD76 7525 jne 0041BD9D \\跳向成功处!不跳就死得好惨!
:0041BD78 50 push eax
* Possible StringData Ref from Data Obj ->"用户注册"
|
:0041BD79 68BC194300 push 004319BC
* Possible StringData Ref from Data Obj ->"注册码错误!请重新输入!"
|
:0041BD7E 68A0194300 push 004319A0
:0041BD83 57 push edi
* Reference To: USER32.MessageBoxA, Ord:01BEh
|
:0041BD84 FF15FC724200 Call dword ptr [004272FC] \\不知道这个CALL有什么用的话,就自己去刨书!
------------------------------------------------------------------
上面0041BD5F的CALL来到这里!!这里可是关键哦!
* Referenced by a CALL at Addresses:
|:0041AAA7 , :0041BD5F
|
:0041A770 81EC00020000 sub esp, 00000200
:0041A776 B940000000 mov ecx, 00000040
:0041A77B 33C0 xor eax, eax
:0041A77D 53 push ebx
:0041A77E 56 push esi
:0041A77F 57 push edi
:0041A780 8D7C240C lea edi, dword ptr [esp+0C]
:0041A784 F3 repz
:0041A785 AB stosd
:0041A786 8B842414020000 mov eax, dword ptr [esp+00000214]\\我输入注册码的位数!
\\下面是比较注册码位数!
\\如果注册码等于6、8、10、12、14、16位
\\就跳到0041A7AB
\\如果不是的话就跳到0041A7B0
:0041A78D 83F806 cmp eax, 00000006
:0041A790 7419 je 0041A7AB
:0041A792 83F808 cmp eax, 00000008
:0041A795 7414 je 0041A7AB
:0041A797 83F80A cmp eax, 0000000A
:0041A79A 740F je 0041A7AB
:0041A79C 83F80C cmp eax, 0000000C
:0041A79F 740A je 0041A7AB
:0041A7A1 83F80E cmp eax, 0000000E
:0041A7A4 7405 je 0041A7AB
:0041A7A6 83F810 cmp eax, 00000010
:0041A7A9 7505 jne 0041A7B0
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041A790(C), :0041A795(C), :0041A79A(C), :0041A79F(C), :0041A7A4(C)
|
:0041A7AB A3C0AF4300 mov dword ptr [0043AFC0], eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A7A9(C)
|
:0041A7B0 8BBC2418020000 mov edi, dword ptr [esp+00000218]
:0041A7B7 83C9FF or ecx, FFFFFFFF
:0041A7BA 33C0 xor eax, eax
:0041A7BC 8D54240C lea edx, dword ptr [esp+0C]
:0041A7C0 F2 repnz
:0041A7C1 AE scasb
:0041A7C2 F7D1 not ecx
:0041A7C4 2BF9 sub edi, ecx
:0041A7C6 8BC1 mov eax, ecx
:0041A7C8 8BF7 mov esi, edi
:0041A7CA 8BFA mov edi, edx
:0041A7CC C1E902 shr ecx, 02
:0041A7CF F3 repz
:0041A7D0 A5 movsd
:0041A7D1 8BC8 mov ecx, eax
:0041A7D3 8B842410020000 mov eax, dword ptr [esp+00000210]
:0041A7DA 83E103 and ecx, 00000003
:0041A7DD 85C0 test eax, eax
:0041A7DF F3 repz \\假如注册码不大于6位,就死在这里!但我不知道为什么!!!
:0041A7E0 A4 movsb
:0041A7E1 7405 je 0041A7E8
:0041A7E3 A3C8AF4300 mov dword ptr [0043AFC8], eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A7E1(C)
|
:0041A7E8 8D4C240C lea ecx, dword ptr [esp+0C]
:0041A7EC 51 push ecx \\DECX可以看见用户名!
:0041A7ED E8DEF9FFFF call 0041A1D0 \\注册码A是怎么样炼成的,F8追!
:0041A7F2 68F84CBA01 push 01BA4CF8
:0041A7F7 8D942414010000 lea edx, dword ptr [esp+00000114]
* Possible StringData Ref from Data Obj ->"%lu"
|
:0041A7FE 68C8194300 push 004319C8 \\D 4319C8可以看见一些数字!
\\我看见的是3397255503
:0041A803 52 push edx
* Reference To: USER32.wsprintfA, Ord:02ACh
|
:0041A804 FF15F8714200 Call dword ptr [004271F8] \\这个CALL是生成注册码B
:0041A80A 8BBC242C020000 mov edi, dword ptr [esp+0000022C]\\DEDI可以看见我输入的注册码!
:0041A811 83C410 add esp, 00000010
:0041A814 8BF7 mov esi, edi \\EDI=ESI
:0041A816 8D4C240C lea ecx, dword ptr [esp+0C] \\DECX可以看见真注册码A!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A83C(C) \\从这里开始到0041A83C是比较真假注册码每一位的ASCII码是否相等,不等就跳下去再比较!
|
:0041A81A 8A01 mov al, byte ptr [ecx]
:0041A81C 8A1E mov bl, byte ptr [esi]
:0041A81E 8AD0 mov dl, al
:0041A820 3AC3 cmp al, bl
:0041A822 751E jne 0041A842
:0041A824 84D2 test dl, dl
:0041A826 7416 je 0041A83E
:0041A828 8A4101 mov al, byte ptr [ecx+01]
:0041A82B 8A5E01 mov bl, byte ptr [esi+01]
:0041A82E 8AD0 mov dl, al
:0041A830 3AC3 cmp al, bl
:0041A832 750E jne 0041A842
:0041A834 83C102 add ecx, 00000002
:0041A837 83C602 add esi, 00000002
:0041A83A 84D2 test dl, dl
:0041A83C 75DC jne 0041A81A
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A826(C)
|
:0041A83E 33C9 xor ecx, ecx
:0041A840 EB05 jmp 0041A847
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041A822(C), :0041A832(C)
|
:0041A842 1BC9 sbb ecx, ecx
:0041A844 83D9FF sbb ecx, FFFFFFFF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A840(U)
|
:0041A847 85C9 test ecx, ecx
:0041A849 7446 je 0041A891
:0041A84B 8DB4240C010000 lea esi, dword ptr [esp+0000010C]\\DESI可以看见真的注册码B
:0041A852 8BC7 mov eax, edi \\这里是我输入的注册码!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A876(C) \\从这里开始到0041A876是比较真假注册码每一位的ASCII码是否相等!
|
:0041A854 8A10 mov dl, byte ptr [eax]
:0041A856 8A1E mov bl, byte ptr [esi]
:0041A858 8ACA mov cl, dl
:0041A85A 3AD3 cmp dl, bl
:0041A85C 751E jne 0041A87C
:0041A85E 84C9 test cl, cl
:0041A860 7416 je 0041A878
:0041A862 8A5001 mov dl, byte ptr [eax+01]
:0041A865 8A5E01 mov bl, byte ptr [esi+01]
:0041A868 8ACA mov cl, dl
:0041A86A 3AD3 cmp dl, bl
:0041A86C 750E jne 0041A87C
:0041A86E 83C002 add eax, 00000002
:0041A871 83C602 add esi, 00000002
:0041A874 84C9 test cl, cl \\是否取完
:0041A876 75DC jne 0041A854 \\没有取完就跳回去!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A860(C)
|
:0041A878 33C0 xor eax, eax
:0041A87A EB05 jmp 0041A881
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041A85C(C), :0041A86C(C)
|
:0041A87C 1BC0 sbb eax, eax
:0041A87E 83D8FF sbb eax, FFFFFFFF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A87A(U)
|
:0041A881 85C0 test eax, eax
:0041A883 740C je 0041A891
:0041A885 5F pop edi
:0041A886 5E pop esi
:0041A887 33C0 xor eax, eax \\清零
:0041A889 5B pop ebx
:0041A88A 81C400020000 add esp, 00000200
:0041A890 C3 ret \\返回
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041A849(C), :0041A883(C)
|
:0041A891 5F pop edi
:0041A892 5E pop esi
:0041A893 B801000000 mov eax, 00000001 \\赋值
:0041A898 5B pop ebx
:0041A899 81C400020000 add esp, 00000200
:0041A89F C3 ret \\返回
------------------------------------------------------------------
上面0041A7ED的CALL来到这里!注册码的生成和比较都再这里!关键!!!!!
* Referenced by a CALL at Addresses:
|:0041A575 , :0041A7ED
|
:0041A1D0 53 push ebx
:0041A1D1 56 push esi
:0041A1D2 57 push edi
:0041A1D3 8B7C2410 mov edi, dword ptr [esp+10] \\DEDI看见我输入的注册码!
:0041A1D7 32DB xor bl, bl
:0041A1D9 8BCF mov ecx, edi \\ECX=EDI
:0041A1DB 8A07 mov al, byte ptr [edi] \\我输入注册码的第一位数的ASCII码入EAX低位!
:0041A1DD 84C0 test al, al \\是否为空!
:0041A1DF 740A je 0041A1EB \\为空的话就跳走!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A1E9(C) \\从这里到0041A1E9是把我输入注册码的ASCII码加再一起放进EBX低位!
|
:0041A1E1 02D8 add bl, al
:0041A1E3 8A4101 mov al, byte ptr [ecx+01]
:0041A1E6 41 inc ecx \\计数器
:0041A1E7 84C0 test al, al
:0041A1E9 75F6 jne 0041A1E1 \\循环!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A1DF(C)
|
:0041A1EB A1C8AF4300 mov eax, dword ptr [0043AFC8]
:0041A1F0 33F6 xor esi, esi
:0041A1F2 A3D8AF4300 mov dword ptr [0043AFD8], eax
:0041A1F7 A1C0AF4300 mov eax, dword ptr [0043AFC0]
:0041A1FC 85C0 test eax, eax
:0041A1FE 7E2D jle 0041A22D
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A22B(C) \\从这里开始到0041A22B就把用户名的ASCII码循环计算出正确注册码的!
\\你把内存区的地址指向6AF20C就可以看见注册码的变化了!
|
:0041A200 8A0C3E mov cl, byte ptr [esi+edi]
:0041A203 32CB xor cl, bl
:0041A205 51 push ecx
:0041A206 E895FFFFFF call 0041A1A0 \\这个是运算CALL,F8追进去!
:0041A20B 83C404 add esp, 00000004
:0041A20E 88043E mov byte ptr [esi+edi], al
:0041A211 3C0A cmp al, 0A
:0041A213 0FBEC0 movsx eax, al
:0041A216 7D05 jge 0041A21D
:0041A218 83C030 add eax, 00000030
:0041A21B EB03 jmp 0041A220
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A216(C)
|
:0041A21D 83C041 add eax, 00000041
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A21B(U)
|
:0041A220 88043E mov byte ptr [esi+edi], al
:0041A223 A1C0AF4300 mov eax, dword ptr [0043AFC0]
:0041A228 46 inc esi \\计数器!
:0041A229 3BF0 cmp esi, eax \\比较用户名是否取完!
:0041A22B 7CD3 jl 0041A200 \\没有就跳回去!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A1FE(C)
|
:0041A22D C6043800 mov byte ptr [eax+edi], 00
:0041A231 5F pop edi
:0041A232 5E pop esi
:0041A233 5B pop ebx
:0041A234 C3 ret
------------------------------------------------------------------
上面0041A206的CALL来到这里!
* Referenced by a CALL at Address:
|:0041A206
|
:0041A1A0 0FBE442404 movsx eax, byte ptr [esp+04]
:0041A1A5 0305D8AF4300 add eax, dword ptr [0043AFD8]
:0041A1AB 69C0697DAE42 imul eax, 42AE7D69
:0041A1B1 0531D40000 add eax, 0000D431
:0041A1B6 A3D8AF4300 mov dword ptr [0043AFD8], eax
:0041A1BB C1F810 sar eax, 10
:0041A1BE 83E00F and eax, 0000000F
:0041A1C1 C3 ret
------------------------------------------------------------------
注册码A的内存注册机:
中断地址:0041A81A
中断次数:1
第一字节:BA
字节长度:2
注册码:内存方式-->寄存器ECX
注册码B的内存注册机:
中断地址:0041A852
中断次数:1
第一字节:8B
字节长度:2
注册码:内存方式-->寄存器ESI
------------------------------------------------------------------
【总 结】:
这个程序一共有两个注册码!
分别是注册码A和注册码B
注册码A是根据用户名注册的!(注册的用户名要大于5位)
注册码B是一机一码!用户名随便!(注册的用户名要大于5位)
一组可以用的注册码:
用户名:Yock[DFCG]
注册码:63532K04
-------------------------------------------------------------------
算法:(大家觉得是不是很熟悉啊?!)
我语文水平差,表达得不要请您帮我补充!谢谢!
把我输入注册码的ASCII码相加结果的最后两位!(假如注册码的ASCII码的和是123,那么最后两位是23)
再把注册码的每一位数的ASCII码XOR后的结果就到下面了!
(这里不知道怎么用文字表达,所以大家看汇编指令吧!这里要多谢师傅兔子,我也是看了它的文章才会这么表达的!)
:0041A1A0 0FBE442404 movsx eax, byte ptr [esp+04]
:0041A1A5 0305D8AF4300 add eax, dword ptr [0043AFD8]
:0041A1AB 69C0697DAE42 imul eax, 42AE7D69
:0041A1B1 0531D40000 add eax, 0000D431
:0041A1B6 A3D8AF4300 mov dword ptr [0043AFD8], eax
:0041A1BB C1F810 sar eax, 10
:0041A1BE 83E00F and eax, 0000000F
:0041A1C1 C3 ret
最后的结果保存在EDI
我个人觉得可以用keymake做一个算法注册机,可惜我不会!555555
哪个大哥会的话可以做一个,做好后如果方便的话可以把怎么做的过程给我看看吗??期待...
最后在这里真心感谢你花了那么多时间看这篇文章!谢谢了...
2003.05.17凌晨于清远
|
相关阅读
Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
-
热门文章
去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>