看雪学苑

《看雪学院 》

制作说明
1. 本论坛精华手册由收集了看雪技术论坛 2000.1.13 ～ 2000.6.30 期间的精华内容，共100余篇原创文章。
2. 本论坛精华手册中的所有内容，个人用户可以免费的收藏、参考，但是谢绝任何商业网站及传统媒体（如出版物）摘编转载！！！
3. 未经看雪学院的授权许可，任何人不得擅自进行篡改、反编译，及将其全部或部分用于商业用途或把本精华手册收录到出版物内。
4. 本精华手册内收录的帖子及图片的相关版权归各版权所有人所有。
5. 欢迎在保持论坛精华手册的完整下散发该教学包。
6. 本精华手册所有文章仅为学习研究软件内含的设计思想和原理。对于您使用本精华中技术所导致的一切后果我们不负任何责任！
7. 特别感谢论坛中的各位版主在论坛辛勤的工作及所有网友对论坛的支持，没有你们的帮助，论坛是无法得到发展及壮大的，也感谢所有将自己的经验无私奉献的朋友们。
8. 其他各类事宜，所有解释权归看雪学院及其论坛或相关的论坛注册用户所有。

看雪学院: http://www.pediy.com

2000月6日30完稿


关于看雪学院

` 关于看雪学院 看雪学院
  • 看雪学院简介

        看雪学院是一个非商业性质的纯技术站点，致力于软件的加密与解密研究。本站的目的是推动国内的加密与解密技术发展，希望通过我们的努力，为广大的加解密爱好者提供一个交流场所。看雪学院提供的所有资源，仅限于个人及教育用途，决非为任何商业目的。
        看雪学院创建于2000年元月，这个主页是当时国内惟一一个从技术角度研究加解密的站点。在这几年的发展历程中，我们得到了无数朋友的关心和支持，在我们最困难的时候，始终有很多朋友在关注、支持着看雪学院。看雪学院提供的技术论坛（看雪技术论坛）成了国内知名的加解密技术论坛，吸引了密界众多高手，大家以知识共享的精神，无私地将自己所知的技术奉献出来了，原创了几千余篇文章，极大地推动了国内加解密技术发展。
        加密与解密技术在相辅相成中不断发展，既没有无坚不摧的矛，也不会有坚不可摧的盾。一个不熟悉敌手的战士不会有太多的胜利机会，不熟悉解密技术的软件开发者，也很难开发出更加先进的保护技术。希望读者看过本精华集后，能够对当今流行的各种软件保护技术及破解技术有所了解，避免在软件保护上犯一些常识性的错误。
  • 联系我们

    • 　　看雪学院: http://www.pediy.com

    ©2000-2004 PE diy.com All rights reserved.
    By KanXue Studio


Advanced Find and Replace V1.2

 标 题:破解Advanced Find and Replace V1.2.2 (6千字)
发信人:DDXia
时 间:2000-3-31 18:56:48
详细信息:
破解Advanced Find and Replace V1.2.2（转载希望保持完整）

级别：原始社会-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]
目的：非常的天真无‘牙’------别无所求（不以任何商业用途为目的）

软件名称：Advanced Find and Replace
整理日期：2000.3.30
最新版本：1.2.2
文件大小：959KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    文档内容查找工具，支持通配符，支持普通文本、HTML 和 RTF 文件，您可以插入、替换、移除整个段落。

http://www.newhua.com.cn/down/c_afr121.zip

好久没有出来混，不知道现在哪位是道上的大哥，知道的告诉我一声哦！呵 。。 呵。。^_^
终于有时间定下心来，写篇破解文了。 （最近工作比较烦，烦、烦阿、还是觉
得写破文比较开心，有福同享嘛！：））
先运行程序，注册，看一看出错的信息是什么？"Sorry, registration code is not correct"
启动W32DASM载入主程序，可以去打一壶凉白开（那可是景德镇小茶壶哦）！查找"sorry,registration." ok 发现目标-----方位在:00473C92

* Possible StringData Ref from Code Obj ->"Sorry, registration code is not "
->"correct"
|
:00473C92 B8143D4700 mov eax, 00473D14
:00473C97 E838F3FDFF call 00452FD4
:00473C9C C6831103000000 mov byte ptr [ebx+00000311], 00

往上糗一糗：
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00473C60(C)
^^^^^^^^^^^^^^-------->这个有问题。查找它的代码！一定是出错后的跳转

|
:00473C87 6A00 push 00000000
:00473C89 668B0DD83C4700 mov cx, word ptr [00473CD8]
:00473C90 B201 mov dl, 01

* Possible StringData Ref from Code Obj ->"Sorry, registration code is not "
->"correct"
|
:00473C92 B8143D4700 mov eax, 00473D14
:00473C97 E838F3FDFF call 00452FD4
:00473C9C C6831103000000 mov byte ptr [ebx+00000311], 00

========================================================================

:00473C2D 8B83D0020000 mov eax, dword ptr [ebx+000002D0]
:00473C33 E870BCFBFF call 0042F8A8-------->取你打入的公司名--DDXia
:00473C38 8B45FC mov eax, dword ptr [ebp-04]
:00473C3B 50 push eax
:00473C3C 8D55F4 lea edx, dword ptr [ebp-0C]
:00473C3F 8B83D4020000 mov eax, dword ptr [ebx+000002D4]
:00473C45 E85EBCFBFF call 0042F8A8--------->取你打入的注册码---123456789
:00473C4A 8B55F4 mov edx, dword ptr [ebp-0C]
:00473C4D 8D4DF8 lea ecx, dword ptr [ebp-08]
:00473C50 8BC3 mov eax, ebx
:00473C52 E8A9F4FFFF call 00473100--------->通过注册码来计算你公司名
:00473C57 8B55F8 mov edx, dword ptr [ebp-08]
:00473C5A 58 pop eax
:00473C5B E81802F9FF call 00403E78--------->计算结果和公司名比较
:00473C60 7525 jne 00473C87 --------->如果不对，就跳到SORRY：（
:00473C62 8BC3 mov eax, ebx
:00473C64 E853FAFFFF call 004736BC
:00473C69 6A00 push 00000000
:00473C6B 668B0DD83C4700 mov cx, word ptr [00473CD8]
:00473C72 B202 mov dl, 02

* Possible StringData Ref from Code Obj ->"Thank you very much for registration"
|
:00473C74 B8E43C4700 mov eax, 00473CE4
:00473C79 E856F3FDFF call 00452FD4
:00473C7E C6831103000001 mov byte ptr [ebx+00000311], 01
:00473C85 EB1C jmp 00473CA3

其中有一个问题是，我们键入的是乱码，所以它产生的也是乱码，而且有一些不是ASC码，
不能得到正确的公司名。因此，只能是暴力解啦！！---不好意思*-*；
把:00473C60 7525 jne 00473C87 -------》改为 je 00473c87

再运行程序，还是显示没有注册。看来程序的开始也做了检查（这种注册方式时常有的哦）

:00473C5B E81802F9FF call 00403E78--------->计算结果和公司名比较
用W32DASM看一下其他地方有没有 call 00403E78的。

* Referenced by a CALL at Addresses:
|:00411FEB , :00416C2B , :00417C2B , :0041CDE9 , :0041DCD0
|:00422617 , :00422635 , :004231D0 , :004281DE , :0042E90A
|:0042E995 , :0042F6C5 , :0042F900 , :0043140F , :0043A607
|:0043ABF1 , :0043AD61 , :0043AED5 , :0043DE6D , :0043E293
|:0043E352 , :0043E76E , :0043E9BF , :0043F23F , :0043FC4D
|:0043FE03 , :004409D1 , :00440B88 , :00440F63 , :0044D621
|:0044E23F , :0045B773 , :0045BBAE , :0045D820 , :0045D928
|:0045E953 , :0045F618 , :0046136F , :0046F81E , :00470155
|:004701B5 , :0047124C , :00472728 , :00472927 , :004729FF
|:00472B54 , :00473586 , :004739E7 , :00473C5B , :00476244
|:004762E7 , :00476347 , :00476356 , :00476749 , :00476854
|:00476960 , :0047747D , :0047748F
|
:00403E78 53 push ebx
:00403E79 56 push esi
:00403E7A 57 push edi
:00403E7B 89C6 mov esi, eax

WHAT？？？？？:-o 我好怕哦！！！不是跟我过不去吗？？看来作者还是挺逗的嘛！
哈哈哈：）） 今晚又是西雅图不眠夜啦！！！

Stop！！！！有新发现！
:00473C52 E8A9F4FFFF call 00473100--------->通过注册码来计算你公司名
用W32DASM看一下其他地方有没有 call 00403E78的

* Referenced by a CALL at Addresses:
|:0047357B , :004739DE , :00473C52
|
:00473100 55 push ebp
:00473101 8BEC mov ebp, esp
:00473103 83C4E0 add esp, FFFFFFE0
:00473106 53 push ebx
:00473107 33DB xor ebx, ebx
:00473109 895DF8 mov dword ptr [ebp-08], ebx

还好了，只有三个地方，而且 00473C52不用作断点的（为什么！看一看上面的程序，不是启动中的判断）

在 :0047357B, 中断了，让我们分析一下
:0047357B E880FBFFFF call 00473100----->计算程序
:00473580 8B45E4 mov eax, dword ptr [ebp-1C]
:00473583 8B55F8 mov edx, dword ptr [ebp-08]
:00473586 E8ED08F9FF call 00403E78--------->比较程序
:0047358B 7523 jne 004735B0---------> 改 jne---->je.

再试一下，只改0047358B jne--------->je 可不可以呢？？？？ 当然可以！
OK！收工！今夜没有星星！！！

完成时间
2000.3.31 00:54


AmazimgMIDI 1.60

 标 题:初学者（7） (4千字)
发信人:liutong
时 间:2000-5-5 17:18:54
详细信息:
软件名称：AmazimgMIDI 1.60
软件大小：839KB
软件类型：共享
适用环境：Win95/98
软件介绍：
可以将您现有的WAV文件转换成为MIDI文件，WAV可能会有人声或者其它非乐器声音的部
分，这个部分可就无能为力了，AmazingMIDI会将这一部分的声音资料转换成为类比的讯
号，不过仍然还是以MIDI的格式储存，您可以在稍后与MIDI编辑软件中一起编辑使用。虽
然AmazingMIDI在转文件方面的功能已经相当强大了，不过它还是有所限制的，目前版本
的AmazingMIDI并无法直接在众多的乐器声音中只对某一种取样，相信这方面的功能限制
应该很快有所改善的。如果对WAV音乐素材直接取样使用的话，AmazingMIDI是个绝佳的转
换工具。
软件来源:<<软件世界>>第5期
保护类型:固定注册码
所用工具:S-ICE, W32Dasm
破解过程:
在help菜单中选择registration,任意输入12345678,CTRL+D转到S-ICE,设断点bpx hmemcpy,
返回软件画面,点OK.程序被中断后,按F12 42次(第43次出错误画面)后,按F10若干次,找到
下面程序
|:00405DEA(U)
|
:00405D5D 8D4C2410 lea ecx, dword ptr [esp+10]
:00405D61 E8C8780100 call 0041D62E
:00405D66 83F801 cmp eax, 00000001
:00405D69 0F85B6000000 jne 00405E25
:00405D6F 51 push ecx
:00405D70 8D442470 lea eax, dword ptr [esp+70]
:00405D74 8BCC mov ecx, esp
:00405D76 89642410 mov dword ptr [esp+10], esp
:00405D7A 50 push eax
:00405D7B E887B50100 call 00421307
:00405D80 8D4C240C lea ecx, dword ptr [esp+0C]
:00405D84 C644247C00 mov [esp+7C], 00
:00405D89 51 push ecx
:00405D8A E861010000 call 00405EF0
:00405D8F 8BC8 mov ecx, eax
:00405D91 E8AA180000 call 00407640 <----将输入码变形
:00405D96 8B00 mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->"<<@::5<720"<-----(变形后的)注册码
|
:00405D98 BE58054400 mov esi, 00440558

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405DBF(C)
|
:00405D9D 8A10 mov dl, byte ptr [eax]<-----取出变形后的输入码
:00405D9F 8A1E mov bl, byte ptr [esi]<-----取出变形后的注册码
:00405DA1 8ACA mov cl, dl
:00405DA3 3AD3 cmp dl, bl
:00405DA5 751E jne 00405DC5<-----错误信息
:00405DA7 84C9 test cl, cl
:00405DA9 7416 je 00405DC1
:00405DAB 8A5001 mov dl, byte ptr [eax+01]
:00405DAE 8A5E01 mov bl, byte ptr [esi+01]
:00405DB1 8ACA mov cl, dl
:00405DB3 3AD3 cmp dl, bl
:00405DB5 750E jne 00405DC5<-----错误信息
:00405DB7 83C002 add eax, 00000002
:00405DBA 83C602 add esi, 00000002
:00405DBD 84C9 test cl, cl
:00405DBF 75DC jne 00405D9D<------未完,继续比较

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405DA9(C)
|
:00405DC1 33C0 xor eax, eax<-----比较正确eax清零
:00405DC3 EB05 jmp 00405DCA

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00405DA5(C), :00405DB5(C)
|
:00405DC5 1BC0 sbb eax, eax
:00405DC7 83D8FF sbb eax, FFFFFFFF<-----比较错误eax置位

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405DC3(U)
|
:00405DCA 85C0 test eax, eax
:00405DCC 8D4C2408 lea ecx, dword ptr [esp+08]
:00405DD0 0F94C3 sete bl <-----若eax为零,bl置位
:00405DD3 E8BAB70100 call 00421592
:00405DD8 84DB test bl, bl
:00405DDA 7513 jne 00405DEF <-----bl不为零,显示"Thank you for your registration"
:00405DDC 6AFF push FFFFFFFF
:00405DDE 6A00 push 00000000

* Possible Reference to String Resource ID=61212: "Incomplete or incorrect information."
|
:00405DE0 681CEF0000 push 0000EF1C
:00405DE5 E8DB180200 call 004276C5
:00405DEA E96EFFFFFF jmp 00405D5D

分析将输入码变形的CALL,便可知道程序是如何处理输入码的.
处理过程如下:
将输入码调头,将其ASCII码与序号相加.
那么我们根据已知的变形后的注册码反推出注册码

序号 9 8 7 6 5 4 3 2 1 0
变形的注册码 < < @ : : 5 < 7 2 0
ASCII码 3C 3C 40 3A 3A 35 3C 37 32 30
减序号后 33 34 39 34 35 31 39 35 31 30

注册码应为: 0159154943


animagic32

 标 题:给初学者,因为我就是个初学者(2) (1千字)
发信人:liutong
时 间:2000-5-3 11:35:25
详细信息:
animagic32

介绍:此软件在<<软件世界>>光盘中,制作网页动画的软件
开始用bpx hmemcpy中断然后按F12直到出现错误画面的前一次.
找到CMP [484FC1],00
jnz *******
直接改此跳转会出现注册成功画面,但选择About菜单或退出重新启动后
仍有未注册提示画面.
追踪过程中,若修改上面跳转后,程序执行了WritePrivateProFileStringA
发现是将用户名,公司名,注册码写入到animagic.ini
综合上面两点,推测程序启动时要读此ini文件,比较后置[00484FC1]
因此设bpm 484FC1后启动程序,找到
call ******
mov [00484FC1],al
注册码的比较一定在CALL中,在CALL上设中断,重新启动程序被中断后,按F8
进入CALL,里面还有一个CALL,按F8进入(因为后面没两句就ret了)
找到了计算过程(原程序用W32dasm存下的程序太大,此段没能拷贝过来)
但其过程如下:
举例说明:
用户名:Killer
将ANIMAGIC16和用户名的ASCII码相加
ASCII(ANIMAFIC16)=2A0
ASCII(转为大写字母(Killer))=263
相加后等于463
463*463=133E49
133E49*16=1A75A46
1A75A46/7=3C7A9C
3C7A9C*463=94DDA54
94DDA54-21=94DDA33

用户名:Killer
注册码:94DDA33

另外此程序还有一个注册码:
将GIFOPT32,用户名和公司名的ASCII码相加
ASCII(ANIMAFIC16)=2A0
ASCII(转为大写字母(Killer))=263
ASCII(转为大写字母(Home))=129
相加后等于58C
58C*58C=1EC490
1EC490*16=2A4E460
2A4E460/7=60B2E9
60B2E9*58C=1860646C
1860646C-21=1860644B

用户名:Killer
公司名:HOME
注册码:94DDA33

程序根据两个字符串ANIMAGIC16和GIFOPT32计算注册码
但不知两个注册码有何区别.


Bannermaker

 标 题:给初学者,因为我就是个初学者(4) (1千字)
发信人:liutong
时 间:2000-5-3 14:13:33
详细信息:
Bannermaker

介绍:此软件在<<软件世界>>光盘上,制作网页横幅广告及按钮软件

设中断bpx hmemcpy
按F12若干次(若按F12后光标行后几行便出现ret就接着按)
找到call ******
JNZ ******
按F8,进入CALL
按F10若干次便找到此段程序
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403F3B(C)
|
:00403F3F 52 push edx
:00403F40 C1EA02 shr edx, 02
:00403F43 7426 je 00403F6B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403F61(C)
|
:00403F45 8B0E mov ecx, dword ptr [esi]<-----输入注册码
:00403F47 8B1F mov ebx, dword ptr [edi]<-----实际注册码
:00403F49 39D9 cmp ecx, ebx
:00403F4B 7558 jne 00403FA5
:00403F4D 4A dec edx
:00403F4E 7415 je 00403F65
:00403F50 8B4E04 mov ecx, dword ptr [esi+04]
:00403F53 8B5F04 mov ebx, dword ptr [edi+04]
:00403F56 39D9 cmp ecx, ebx
:00403F58 754B jne 00403FA5
:00403F5A 83C608 add esi, 00000008
:00403F5D 83C708 add edi, 00000008
:00403F60 4A dec edx
:00403F61 75E2 jne 00403F45
:00403F63 EB06 jmp 00403F6B

本想追踪注册码的生成,没想到是固定的注册码,而与用户名无关

用户名:任意
注册码:6212104512252A


Battery Bar 1.07

 标 题:初学者(10) (8千字)
发信人:liutong
时 间:2000-5-14 11:11:20
详细信息:
软件名称： Battery Bar
软件版本： 1.07
软件大小： 907.00
软件授权： 共享软件
使用平台： Win95/98/NT
发布公司： http://www.nistech.com/
软件简介： 能显示出你的笔记本电脑的电池还能用多长时间，电量剩余的百分比。
软件下载： bat_bar.zip

设断点:bpx hmemcpy
按F12 12次(第13次出错误画面)
然后按F10若干次可找到下面程序段
:00406542 E88D300300 call 004395D4
:00406547 8D4DF8 lea ecx, dword ptr [ebp-08]
:0040654A 8B01 mov eax, dword ptr [ecx]
:0040654C 50 push eax
:0040654D 53 push ebx
:0040654E E889010000 call 004066DC <----此CALL是计算注册码,我改下面的跳转不成功
才找到这儿
:00406553 83C40C add esp, 0000000C
:00406556 3C01 cmp al, 01
:00406558 0F94C2 sete dl
:0040655B 83E201 and edx, 00000001
:0040655E 8D45F8 lea eax, dword ptr [ebp-08]
:00406561 52 push edx
:00406562 BA02000000 mov edx, 00000002
:00406567 FF4E1C dec [esi+1C]
:0040656A E8D5660600 call 0046CC44
:0040656F FF4E1C dec [esi+1C]
:00406572 8D45FC lea eax, dword ptr [ebp-04]
:00406575 BA02000000 mov edx, 00000002
:0040657A E8C5660600 call 0046CC44
:0040657F 59 pop ecx
:00406580 84C9 test cl, cl
:00406582 0F84F1000000 je 00406679 <-----若在此改变程序方向
可显示注册成功,但若重新
启动程序,看About项,:-{

进入004066DC,按F10若干次后,找到计算注册码的部分,就是下面这段:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040689D(C)
|
:004067B7 8BF3 mov esi, ebx
:004067B9 56 push esi
:004067BA 8D45F8 lea eax, dword ptr [ebp-08]
:004067BD 50 push eax
:004067BE E801630600 call 0046CAC4
:004067C3 83C408 add esp, 00000008
:004067C6 8D45F8 lea eax, dword ptr [ebp-08]
:004067C9 E8E2650600 call 0046CDB0
:004067CE 0375F8 add esi, dword ptr [ebp-08]
:004067D1 4E dec esi
:004067D2 803E00 cmp byte ptr [esi], 00
:004067D5 7534 jne 0040680B
:004067D7 8BF3 mov esi, ebx
:004067D9 56 push esi
:004067DA 8D55F8 lea edx, dword ptr [ebp-08]
:004067DD 52 push edx
:004067DE E8E1620600 call 0046CAC4
:004067E3 83C408 add esp, 00000008
:004067E6 8D45F8 lea eax, dword ptr [ebp-08]
:004067E9 E8C2650600 call 0046CDB0
:004067EE 8BC7 mov eax, edi
:004067F0 B91A000000 mov ecx, 0000001A
:004067F5 99 cdq
:004067F6 F7F9 idiv ecx
:004067F8 0375F8 add esi, dword ptr [ebp-08]
:004067FB 8955C8 mov dword ptr [ebp-38], edx
:004067FE 8B45C8 mov eax, dword ptr [ebp-38]
:00406801 4E dec esi
:00406802 99 cdq
:00406803 33C2 xor eax, edx
:00406805 2BC2 sub eax, edx
:00406807 0441 add al, 41
:00406809 8806 mov byte ptr [esi], al

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004067D5(C)
|
:0040680B 8BF3 mov esi, ebx
:0040680D 56 push esi
:0040680E 8D4DF8 lea ecx, dword ptr [ebp-08]
:00406811 51 push ecx
:00406812 E8AD620600 call 0046CAC4
:00406817 83C408 add esp, 00000008
:0040681A 8D45F8 lea eax, dword ptr [ebp-08]
:0040681D E88E650600 call 0046CDB0
:00406822 0375F8 add esi, dword ptr [ebp-08]
:00406825 4E dec esi
:00406826 0FBE3E movsx edi, byte ptr [esi]
:00406829 8BF3 mov esi, ebx
:0040682B 56 push esi
:0040682C 8D45FC lea eax, dword ptr [ebp-04]
:0040682F 50 push eax
:00406830 E88F620600 call 0046CAC4
:00406835 83C408 add esp, 00000008
:00406838 8D45FC lea eax, dword ptr [ebp-04]
:0040683B E870650600 call 0046CDB0
:00406840 8D045B lea eax, dword ptr [ebx+2*ebx]<----给EAX赋值
:00406843 B91A000000 mov ecx, 0000001A <----后面作为除数
:00406848 C1E003 shl eax, 03 <----EAX乘以8
:0040684B 0375FC add esi, dword ptr [ebp-04]
:0040684E 2BC3 sub eax, ebx <----EAX=EAX-EBX
:00406850 4E dec esi
:00406851 03C0 add eax, eax <----EAX=EAX*2
:00406853 03C7 add eax, edi
:00406855 99 cdq
:00406856 F7F9 idiv ecx <-----做除法
:00406858 8955C4 mov dword ptr [ebp-3C], edx
:0040685B B905000000 mov ecx, 00000005 <-----注册码4位一组,中间用'-'隔开
:00406860 8B45C4 mov eax, dword ptr [ebp-3C]
:00406863 99 cdq
:00406864 33C2 xor eax, edx
:00406866 2BC2 sub eax, edx
:00406868 0441 add al, 41 <-----EAX=EAX+41
:0040686A 8806 mov byte ptr [esi], al <----加后的数值即是注册码的一位
:0040686C 8BC3 mov eax, ebx
:0040686E 99 cdq
:0040686F F7F9 idiv ecx
:00406871 85D2 test edx, edx
:00406873 751E jne 00406893
:00406875 8BF3 mov esi, ebx
:00406877 56 push esi
:00406878 8D45FC lea eax, dword ptr [ebp-04]
:0040687B 50 push eax
:0040687C E843620600 call 0046CAC4
:00406881 83C408 add esp, 00000008
:00406884 8D45FC lea eax, dword ptr [ebp-04]
:00406887 E824650600 call 0046CDB0
:0040688C 0375FC add esi, dword ptr [ebp-04]
:0040688F 4E dec esi
:00406890 C6062D mov byte ptr [esi], 2D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00406873(C)
|
:00406893 8D3C5B lea edi, dword ptr [ebx+2*ebx]
:00406896 83C709 add edi, 00000009
:00406899 43 inc ebx
:0040689A 83FB13 cmp ebx, 00000013
:0040689D 0F8E14FFFFFF jle 004067B7 <----比较19位注册码未计算完,返回

举例:
用户名:LiuTong
对于ASCII为:4C 69 75 54 6F 6E 67
计算过程:
EAX=3*EBX EAX=EAX*8 EAX=EAX-EBX EAX=EAX*2 EAX=EAX+输入用户名 EAX=余数(EAX/26)+41
以下数据为十六进制
EBX=1 EAX=3 EAX=18 EAX=17 EAX=2E EAX=2E+4C=7A EAX=12+41=53
EBX=2 EAX=6 EAX=30 EAX=2E EAX=5C EAX=5C+69=C5 EAX=F+41=50
EBX=3 EAX=9 EAX=48 EAX=45 EAX=8A EAX=8A+75=FF EAX=15+41=56
EBX=4 EAX=C EAX=60 EAX=5C EAX=B8 EAX=B8+54=102 EAX=8+41=49
EBX=5 EAX=F EAX=78 EAX=73 EAX=E6 EAX=E6+6F=155 EAX=3+41=44
EBX=6 EAX=12 EAX=90 EAX=8A EAX=114 EAX=114+6E=182 EAX=16+41=57
EBX=7 EAX=15 EAX=A8 EAX=A1 EAX=142 EAX=142+67=1A9 EAX=9+41=4A
EBX=8 EAX=18 EAX=C0 EAX=B8 EAX=170 EAX=170+20=190 EAX=A+41=4B
EBX=9 EAX=1B EAX=D8 EAX=CF EAX=19E EAX=19E+20=1BE EAX=4+41=45
EBX=A EAX=1E EAX=F0 EAX=E6 EAX=1CC EAX=1CC+20=1EC EAX=18+41=59
EBX=B EAX=21 EAX=108 EAX=FD EAX=1FA EAX=1FA+20=21A EAX=12+41=53
EBX=C EAX=24 EAX=120 EAX=114 EAX=228 EAX=228+20=248 EAX=C+41=4D
EBX=D EAX=27 EAX=138 EAX=12B EAX=256 EAX=256+20=276 EAX=6+41=47
EBX=E EAX=2A EAX=150 EAX=142 EAX=284 EAX=284+20=2A4 EAX=0+41=41
EBX=F EAX=2D EAX=168 EAX=159 EAX=2B2 EAX=2B2+20=2D2 EAX=14+41=55
EBX=10 EAX=30 EAX=180 EAX=170 EAX=2E0 EAX=2E0+20=300 EAX=E+41=4F
EBX=11 EAX=33 EAX=198 EAX=187 EAX=30E EAX=30E+20=32E EAX=8+41=49
EBX=12 EAX=36 EAX=1B0 EAX=19E EAX=33C EAX=33C+20=35C EAX=2+41=43
EBX=13 EAX=39 EAX=1C8 EAX=1B5 EAX=36A EAX=36A+20=38A EAX=16+41=57

整理后注册码应为:SPVI-WJKE-SMGA-OICW


Cache and cookie washer

 标 题:请破破这个软件 (129字)
发信人:liutongwu
时 间:2000-6-25 22:50:58
详细信息:
下载www.webroot.com
软件名称:cache and cookie washer
我已去除了30天限制,但每次启动时总有提示注册画面,
按"Try it"后,软件运行.

标 题:for IE的 (1千字)
发信人:dr0
时 间:2000-6-26 12:48:09
详细信息:

看看下面的代码。很显然它在DS:[004679D4]中设了个标志，
强行将该标志置为9并跳过显示Nag的代码应该可行。
跟一下它在哪里置这个标志，应该可以找到它把时间藏在什么地方。

:004628BF cmp dword ptr [004679D4], 00000009
:004628C6 jne 00462928

* Possible StringData Ref from Code Obj ->"You currently have "
|
:004628C8 push 00463740
:004628CD push dword ptr [004679D8]

* Possible StringData Ref from Code Obj ->" left in your trial."
|
:004628D3 push 0046375C
:004628D8 lea eax, dword ptr [ebp-14]

................

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004628C6(C)
|
:00462928 cmp dword ptr [004679D4], 0000000A
:0046292F jne 004629B7
:00462935 mov eax, dword ptr [00466EA8]
:0046293A mov eax, dword ptr [eax]
:0046293C mov eax, dword ptr [eax+000001E0]

* Possible StringData Ref from Code Obj ->" Sorry! Your 30 day trial "
->"has expired."
|
:00462942 mov edx, 0046377C
:00462947 call 00420444

标 题:这个玩意儿太变态了 (1千字)
发信人:dr0
时 间:2000-6-26 19:12:21
详细信息:

下面有一处是把DS:[004679D4]清零，也要改掉，不过改的时候注意不要破坏堆栈了。还有其它简单些的改法。
这个玩意儿显然把时间记录在HKEY_LOCAL_MACHINE\Software\caw2\data里头。
最变态的是它每次都要sleep( )一秒，使得启动极慢。可把传给sleep( )的
参数由0x000003E8改为1，或者干脆不要让它调用sleep( )。 shit !

:0045D606 68E8030000 push 000003E8

* Reference To: kernel32.Sleep, Ord:0000h
|
:0045D60B E8B486FAFF Call 00405CC4
:0045D610 33C0 xor eax, eax
:0045D612 A3D4794600 mov dword ptr [004679D4], eax //这里也要改成强行赋9
:0045D617 B101 mov cl, 01

* Possible StringData Ref from Code Obj ->"\Software\caw2"
|
:0045D619 BA28D84500 mov edx, 0045D828
:0045D61E 8B45F8 mov eax, dword ptr [ebp-08]
:0045D621 E852AAFEFF call 00448078
:0045D626 8D4DEC lea ecx, dword ptr [ebp-14]

* Possible StringData Ref from Code Obj ->"data"
|
:0045D629 BA40D84500 mov edx, 0045D840

标 题:去除Nag的方法 (985字)
发信人:dr0
时 间:2000-6-26 19:27:10
详细信息:

除了上面所说的去除时间限制之外，如果还要去除Nag，则将下面的jne 00462928直接改为jmp 004629B7即可。

:004628BF 833DD479460009 cmp dword ptr [004679D4], 00000009
:004628C6 7560 jne 00462928
....................
:00462928 833DD47946000A cmp dword ptr [004679D4], 0000000A
:0046292F 0F8582000000 jne 004629B7
....................
:004629B2 E94A0D0000 jmp 00463701
:004629B7 8B45FC mov eax, dword ptr [ebp-04]
:004629BA E859B0FFFF call 0045DA18
:004629BF 8D55E8 lea edx, dword ptr [ebp-18]
:004629C2 8B45FC mov eax, dword ptr [ebp-04]
:004629C5 E84ADAFBFF call 00420414
:004629CA 8B55E8 mov edx, dword ptr [ebp-18]
:004629CD 8B45FC mov eax, dword ptr [ebp-04]
:004629D0 E89FE1FFFF call 00460B74
:004629D5 84C0 test al, al
:004629D7 7405 je 004629DE


CD/Spectrum Pro V3.6.3603

 标 题:给初学者,因为我就是个初学者(1) (3千字)
发信人:liutong
时 间:2000-5-3 11:33:16
详细信息:
CD/Spectrum Pro V3.6.3603

介绍:此软件在<<软件世界>>光盘中,CD播放器

设置中断BPX HMEMCPY
按F12 11次(第12次出错误画面)
按F8进入 CALL 0040299A
按F8进入 into CALL 00402622

找到6个注册码(CD/Spectrum PRO的注册码)
* Referenced by a CALL at Addresses:
|:004029A3 , :004029AD , :004029B7 , :004029C1
|
:00402622 55 push ebp
:00402623 8BEC mov ebp, esp
:00402625 56 push esi
:00402626 57 push edi
:00402627 8B7D08 mov edi, dword ptr [ebp+08]
:0040262A B897C70000 mov eax, 0000C797
:0040262F 3BF8 cmp edi, eax
:00402631 0F87E9000000 ja 00402720
:00402637 0F8429010000 je 00402766
:0040263D B8AD4F0000 mov eax, 00004FAD
:00402642 3BF8 cmp edi, eax
:00402644 7774 ja 004026BA
:00402646 0F84BA000000 je 00402706
:0040264C 81FFAD2B0000 cmp edi, 00002BAD<----11181 (转成十进制)
:00402652 7446 je 0040269A
:00402654 81FF952F0000 cmp edi, 00002F95<----12181
:0040265A 743E je 0040269A
:0040265C 81FF7D330000 cmp edi, 0000337D<----13181
:00402662 7436 je 0040269A
:00402664 81FF3D3D0000 cmp edi, 00003D3D<----15677
:0040266A 7414 je 00402680
:0040266C 81FF25410000 cmp edi, 00004125<----16677
:00402672 740C je 00402680
:00402674 81FF0D450000 cmp edi, 0000450D<----17677
:0040267A 0F8547010000 jne 004027C7

找到5个注册码(The kinemorphic 3D Screen Saver的注册码)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402644(C)
|
:004026BA 81FF95530000 cmp edi, 00005395<----好象不能用
:004026C0 7444 je 00402706
:004026C2 81FF7D570000 cmp edi, 0000577D<----好象不能用
:004026C8 743C je 00402706
:004026CA 81FFBEBA0000 cmp edi, 0000BABE<----47806
:004026D0 7414 je 004026E6
:004026D2 81FFA6BE0000 cmp edi, 0000BEA6<----48806
:004026D8 740C je 004026E6
:004026DA 81FF8EC20000 cmp edi, 0000C28E<----49806
:004026E0 0F85E1000000 jne 004027C7

找到5个注册码(The Hypnogenic Screen Saver的注册码)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402631(C)
|
:00402720 B853F90000 mov eax, 0000F953
:00402725 3BF8 cmp edi, eax
:00402727 7750 ja 00402779
:00402729 7478 je 004027A3
:0040272B 81FF7FCB0000 cmp edi, 0000CB7F<----52095
:00402731 7433 je 00402766
:00402733 81FF67CF0000 cmp edi, 0000CF67<----53095
:00402739 742B je 00402766
:0040273B 81FFDEDA0000 cmp edi, 0000DADE<----56030
:00402741 7410 je 00402753
:00402743 81FFC6DE0000 cmp edi, 0000DEC6<----57030
:00402749 7408 je 00402753
:0040274B 81FFAEE20000 cmp edi, 0000E2AE<----58030
:00402751 7574 jne 004027C7

find 5 codes(for The Psychedelic Screen Saver)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402727(C)
|
:00402779 81FFDEFA0000 cmp edi, 0000FADE<----64222
:0040277F 743A je 004027BB
:00402781 81FF3BFD0000 cmp edi, 0000FD3B<----64827
:00402787 741A je 004027A3
:00402789 81FFC6FE0000 cmp edi, 0000FEC6<----65222
:0040278F 742A je 004027BB
:00402791 81FF23010100 cmp edi, 00010123<----65827
:00402797 740A je 004027A3
:00402799 81FFAE020100 cmp edi, 000102AE<----66222
:0040279F 741A je 004027BB
:004027A1 EB24 jmp 004027C7


CDCOPY v4.745

 标 题:CDCOPY v4.745破解 (1千字)
发信人:冰毒
时 间:2000-3-7 19:18:53
详细信息:
这是曾贴在另外一个论坛的帖子,回答一位朋友的如何破解CDCOPY的问题. 今天转贴在这里,希望更多初学破解的朋友学会如何对付这种以内存某处的值作为注册标志的程序. 开头的废话没删掉,因为发现还是有不少朋友不知道如何提问.
================CUT==================================
看你在几个论坛上都贴了类似的帖子. 论坛上提问的多,回答的少,要破解的多,学破解的少. 提问的也不得要领,只是说谁知道怎么破解(注册)什么什么软件.未必你说的软件是别人都知道的东东. 最好写明软件名称,类型,保护类型,何处下载,你在什么地方卡壳,破不了,这样别人才'有可能'帮你. 作为新手,最好先找些入门教程,拿其中介绍的软件跟着教程破,练过一段时间再试着自己破解. 如果你连最基本的知识都欠缺,最基本的工具都不会用,别指望有人能手把手教你做cracker. 你说对不对? ^_^

废话说完,入正题回答你的问题. 只是我从作者下载的是v4.745但和你手头的应该没多大区别.
1.运行CDCOPY
2.BPX messageboxa
3.在CDCOPY中选择File菜单的CD Writing项目
4.被拦住后,F12回到程序,点击OK
5.又被拦住. 向光标所在行往上看不远,有下面的代码
CMP DWORD PTR [0047C3B4],00000000
JNZ XXXXXX
6. 可以看出,如果[0047C3B4]的值不为0,就可跳过警告提示,
很可能程序拿[0047C3B4]的值作为判断是否注册的标志
7. BD * 然后BPM 0047C3B4
8. 再选CD Writing,被拦住
9. 在JNZ行处,r fl z让程序跳走
10.那个警告框没有了吧,不过又出来一个提示框,但这没办法,
因为真正注册用户才能从作者处得到所需的DLL文件
11.保留BPM的断点不动,再选Help->About,又会被拦
12.同样r fl z改变程序跳转方向,你会看到shareware...变成registered...
13.退出CDCOPY,重新启动程序,又会被拦几次,在所有条件跳转时r fl z,
14.进入程序后,你会发现菜单中的选项中原来灰色的现在可以选中了.
15.你要破解这个程序有两种办法,一种是改跳转,JNZ改JZ,JZ改JNZ,另
一种是想办法把[0047C3B4]赋值为1. 前一种相对容易,后一种更漂亮.
不过,你得自己去改了,我只告诉你程序的保护及如何绕过它. 还有对你的版本而言肯定不是[0047C3B4],但方法是一样的.
=====================CUT==========================


ClapSE 3.0

 标 题:给初学者,因为我就是个初学者(3) (569字)
发信人:liutong
时 间:2000-5-3 14:12:02
详细信息:
软件名称：ClapSE 3.0
软件大小：2.16MB
软件类型：共享 适用环境：Win9x/NT/2000
软件介绍：
用来抓取、管理和编辑图形文件和视频文件， 可以搜索、复制、剪贴，可以为图象舔加注释和声音，支持许多不同的视频设备
和扫描设备，支持BMP, DIB,WMF, PNG, AVI, GIF和JPG等格式文件。

设置断点bpx hmemcpy
程序被中断后,按F12若干次(出现错误画面次数-1)
按F10若干次,可找到一比较指令,数据为十六进制格式
(软件注册后,我删除了此软件,进注册表,搜索clapse并将相关内容删除,
但任无法回到注册前的状态,因此没有贴出相关程序)
此软件有standard和full注册方式
我选择的full,得到的注册码是:22110


Deep Green Reversi 4.1.1

 标 题:Help? (239字)
发信人:1212
时 间:2000-6-29 14:37:07
阅读次数:9
详细信息:
这里有一程序 Deep Green Reversi 4.1.1,用Aspack压缩，用prodump解压后，程序能运行。但是用w32dasm却看不到Hex信息，无法找到注册错这样的字样。可是程序再检查已无任何壳。用Gtw2.52查看的。

望大虾们指教。其主页Http://www.blochweb.com/reversi.htm

标 题:不用脱壳，注册码很好找 (3千字)
发信人:dr0
时 间:2000-6-29 15:36:03
详细信息:

生成和判断注册码的函数如下所示，可以写个注册机。
Name: dr0
Mail: dr0@21cn.com
Code: 3762-8756

0167:0040DD4C PUSH EBP
0167:0040DD4D MOV EBP,ESP
0167:0040DD4F ADD ESP,FFFFFB7C
0167:0040DD55 PUSH EBX
0167:0040DD56 PUSH ESI
0167:0040DD57 PUSH EDI
0167:0040DD58 XOR EBX,EBX
0167:0040DD5A XOR EDI,EDI
0167:0040DD5C MOV EAX,[EBP+0C]
0167:0040DD5F MOV ESI,EAX
0167:0040DD61 JMP 0040DD6A
0167:0040DD63 MOVSX EAX,BYTE PTR [ESI]
0167:0040DD66 ADD EBX,EAX //名字的累加和
0167:0040DD68 INC EDI
0167:0040DD69 INC ESI
0167:0040DD6A MOV EDX,[EBP+0C]
0167:0040DD6D PUSH EDX
0167:0040DD6E CALL 00508080
0167:0040DD73 POP ECX
0167:0040DD74 CMP EDI,EAX
0167:0040DD76 JB 0040DD63
0167:0040DD78 XOR EDI,EDI
0167:0040DD7A MOV EAX,[EBP+10]
0167:0040DD7D MOV ESI,EAX
0167:0040DD7F JMP 0040DD88
0167:0040DD81 MOVSX EAX,BYTE PTR [ESI]
0167:0040DD84 ADD EBX,EAX //继续累加Email串中的字符
0167:0040DD86 INC EDI
0167:0040DD87 INC ESI
0167:0040DD88 MOV EDX,[EBP+10]
0167:0040DD8B PUSH EDX
0167:0040DD8C CALL 00508080
0167:0040DD91 POP ECX
0167:0040DD92 CMP EDI,EAX
0167:0040DD94 JB 0040DD81
0167:0040DD96 PUSH 0A
0167:0040DD98 LEA ECX,[EBP-03F0]
0167:0040DD9E PUSH ECX
0167:0040DD9F PUSH EBX
0167:0040DDA0 CALL 0050CF58
0167:0040DDA5 ADD ESP,0C
0167:0040DDA8 MOV DWORD PTR [EBP+FFFFFBFC],00000D87
0167:0040DDB2 MOV DWORD PTR [EBP-0400],00002234
0167:0040DDBC MOV DWORD PTR [EBP-03FC],00002231
0167:0040DDC6 MOV DWORD PTR [EBP-03F8],0000128B
0167:0040DDD0 MOV DWORD PTR [EBP-03F4],000015AD
0167:0040DDDA PUSH 0A
0167:0040DDDC LEA EAX,[EBP-03F0]
0167:0040DDE2 PUSH EAX
0167:0040DDE3 LEA EDX,[EBX+000009C5]
0167:0040DDE9 PUSH EDX
0167:0040DDEA CALL 0050CF58
0167:0040DDEF ADD ESP,0C
0167:0040DDF2 MOV EDX,[EBP+14]
0167:0040DDF5 MOV CL,[EAX]
0167:0040DDF7 CMP CL,[EDX] //比较注册码的一部分
0167:0040DDF9 JNZ 0040DF7D
0167:0040DDFF TEST CL,CL
0167:0040DE01 JZ 0040DE19
0167:0040DE03 MOV CL,[EAX+01]
0167:0040DE06 CMP CL,[EDX+01]
0167:0040DE09 JNZ 0040DF7D
0167:0040DE0F ADD EAX,02
0167:0040DE12 ADD EDX,02
0167:0040DE15 TEST CL,CL
0167:0040DE17 JNZ 0040DDF5
0167:0040DE19 JNZ 0040DF7D
0167:0040DE1F PUSH 0A
0167:0040DE21 LEA EAX,[EBP-03F0]
0167:0040DE27 PUSH EAX
0167:0040DE28 MOV EAX,EBX
0167:0040DE2A MOV ECX,00000005
0167:0040DE2F XOR EDX,EDX
0167:0040DE31 DIV ECX
0167:0040DE33 MOV EAX,[EDX*4+EBP+FFFFFBFC]
0167:0040DE3A PUSH EAX
0167:0040DE3B CALL 0050CF58
0167:0040DE40 ADD ESP,0C
0167:0040DE43 MOV EDX,[EBP+18]
0167:0040DE46 MOV CL,[EAX]
0167:0040DE48 CMP CL,[EDX] //比较注册码的另一部分
0167:0040DE4A JNZ 0040DF7D
0167:0040DE50 TEST CL,CL
0167:0040DE52 JZ 0040DE6A
0167:0040DE54 MOV CL,[EAX+01]
0167:0040DE57 CMP CL,[EDX+01]
0167:0040DE5A JNZ 0040DF7D
0167:0040DE60 ADD EAX,02
0167:0040DE63 ADD EDX,02
0167:0040DE66 TEST CL,CL
0167:0040DE68 JNZ 0040DE46
0167:0040DE6A JNZ 0040DF7D


dll show4.4

 标 题:注册dll show4.4 (448字)
发信人:sunwk（小楼）
时 间:2000-4-13 16:12:32
详细信息:
注册dll show4.4
近日装了一个 dll show4.4，它是有30天使用限制。
运行后选 “Register”，填入
User　Name： 你的姓名
Orginazation： 随便
Registration： 乱填

运行TRW2000 1.06
BPX HMEMCPY
G
回到dll show，按下 OK按扭，TRW跳出。
下指令
BD
按F12 11下，改按F10，走到
CS:40D5EB cmp eax, 0D5FCE3C
CS:40D5F0 je 40D5FE <--**

此处改 je 为 jne
清除断点 bc
g
注册完毕。
注：从新运行 dll show ，选 “Register”，你会看到真正的注册码。


EXESCOPE5.12

 标 题:用TRW2000破解EXESCOPE5.12 (855字)
发信人:buttonl
时 间:2000-4-24 10:40:42
详细信息:
第一次写破解文章，不对之处还望指教。
工具：TRW2000
目标：EXESCOPE5.12
这是一个功能强大的汉化软件，先用TRW2000 LOAD入EXESCOPE，只要你找到下面的代码
你就成功了。
:00484A6F CALL 00403BA4
CMP EAX, BYTE+0A 第一位是否为A
JNZ 00484AA0
MOV EAX,[EBP-04]
CMP BYTE[EAX],41 是否为A
JNZ 00484AA0
MOV EAX,[EBP-04]
MOVZX EAX,BYTE[EAX+08] 取第九位
MOV EDX,[EBP-04]
MOVZX EDX,BYTE[EDX+09]取第十位
ADD EAX,EDX 第九位加第十位
MOV ECX,0A 此处注意ECX=？？
CDQ
IDIV ECX 除ECX
CMP EDX,BYTE+04 余数是否为4
JNZ 00484AA0
从上可知密码为：AXXXXXXX？？。只要第一位为A，第九位加第十位除ECX余数为4
即可注册，名字可随便填，只要第九位加第十位等于十进制的8，就可注册。


FlashFXP 1.2.602

 标 题:大家不妨来试试这个软件的破解！ (108字)
发信人:guest
时 间:2000-6-12 21:17:20
详细信息:
FlashFXP V1.2 Build 602
下载地址：
http://software.wx88.net/ftpfiles/internet/int-ftpm/ffxp1.2.602.zip
或：http://www.flashfxp.com/preview/ffxp1.2.602.zip

标 题:FlashFXP 1.2.602 破解 (2千字)
发信人:冰毒
时 间:2000-6-16 8:23:36
详细信息:

这个程序的原来似乎是用UPX加壳的,这次却换用PECompact加壳了. 手动脱壳不难. 程序入口是一对PUSHFD/PUSHAD,在第一个CALL时F8进入,F10往下走一阵. 找到POPAD/POPFD这对指令,在其上设断. 拦下,F10到RET行时便可用Procdump脱壳了. EOP=518024.
注册信息以加密过的形式存放在FlashFxp.ini中,程序启动时读入并解码还原. 因此,设断 bpx getprivateprofilestringa do "dd *(ss:(esp+8))". 运行程序,第2次拦截,数据窗中见到Serial的字样. F12回到程序, F10往下两行,EDX中便是密文形式的序号. 设断bpr. 可以见到程序将序号转放到内存的另一处,同样对这一处设断bpr. 拦下后跟踪,来到

.0047DFFE: 8B4508 mov eax,[ebp][00008]
.0047E001: 8B55F0 mov edx,[ebp][-0010] /在此行设断
.0047E004: E83F5CF8FF call .000403C48
.0047E009: 33C0 xor eax,eax

可以见到EDX中先后出现解码后的序号和姓名(即我们输入的注册信息). 然后F10来到

.00509EB4: E8739FEFFF call .000403E2C /(1)
.00509EB9: 83F802 cmp eax,002 /注册码长度大于姓名长度的2倍?
.00509EBC: 0F8EBA000000 jle .000509F7C /不是则跳开(这里应使其不跳)
.00509EC2: 8B45F8 mov eax,[ebp][-0008]
.00509EC5: 8B55FC mov edx,[ebp][-0004]
.00509EC8: E86FA0EFFF call .000403F3C /(2)
.00509ECD: 0F85A9000000 jne .000509F7C /这里使其不跳
.00509ED3: 8B45FC mov eax,[ebp][-0004]
.00509ED6: E8718CFAFF call .0004B2B4C /(3)
.00509EDB: 84C0 test al,al
.00509EDD: 750B jne .000509EEA /这里使其不跳
.00509EDF: 55 push ebp
.00509EE0: E81FFBFFFF call .000509A04 /(4)
.00509EE5: 59 pop ecx
.00509EE6: 84C0 test al,al
.00509EE8: 752D jne .000509F17 /这里使其跳
.00509EEA: C605582F520001 mov b,[000522F58],001
.00509EF1: 6A00 push 000
.00509EF3: 6A00 push 000
.00509EF5: 6875040000 push 000000475
.00509EFA: A1482F5200 mov eax,[000522F48]
.00509EFF: E8E003F3FF call .00043A2E4

附带说一下,跟踪时可见到程序中一个不小的黑名单. 另外,如果只Patch (1)(2)两处,你可以试试会发生什么. :) 不脱壳直接对程序进行Patch也行,具体做法可参考"侠客之家"IceBird的教程.

标 题:注册机 (4千字)
发信人:郭大志
时 间:2000-6-16 10:38:58
详细信息:

原来它对名字还有些限制，昨天没仔细看，还以为是有假注册码，被它骗了。
1、它要求名字中必须有空格，即名字由First Name和Last Name构成，且以空格格开；
2、名字的第一个字母必须大写，最好把First Name和Last Name的第一个字母都大写；
3、名字的长度要大于等于4；
4、如冰毒所说的，名字的前几个字母不要和黑名单中的重合了，即如果黑名单中的名字是你的名字的子串，就begger off。

它用同一个子程序来判断注册码。
第一次调用这个子程序把INI文件中的注册码密文变成明文；
第二次调用这个子程序把INI文件中的名字的密文变成明文；
第三次则调用该子程序对注册码的明文进行变换，如果变换的结果等于你的名字，则OK，否则game over。

该段子程序如下，用SoftICE跟一下就清楚了。

0167:0047DF3B LEA EAX,[EBP-2C]
0167:0047DF3E PUSH EAX
0167:0047DF3F MOV ECX,00000002
0167:0047DF44 MOV EDX,00000001
0167:0047DF49 MOV EAX,[EBP-04]
0167:0047DF4C CALL 00404030
0167:0047DF51 MOV ECX,[EBP-2C]
0167:0047DF54 LEA EAX,[EBP-28]
0167:0047DF57 MOV EDX,0047E064
0167:0047DF5C CALL 00403E78
0167:0047DF61 MOV EAX,[EBP-28]
0167:0047DF64 CALL 00408D84
0167:0047DF69 MOV EDI,EAX //两个字符转换成一个数a
0167:0047DF6B MOV DWORD PTR [EBP-14],00000003
0167:0047DF72 LEA EAX,[EBP-2C]
0167:0047DF75 PUSH EAX
0167:0047DF76 MOV ECX,00000002
0167:0047DF7B MOV EDX,[EBP-14]
0167:0047DF7E MOV EAX,[EBP-04]
0167:0047DF81 CALL 00404030
0167:0047DF86 MOV ECX,[EBP-2C]
0167:0047DF89 LEA EAX,[EBP-28]
0167:0047DF8C MOV EDX,0047E064
0167:0047DF91 CALL 00403E78
0167:0047DF96 MOV EAX,[EBP-28]
0167:0047DF99 CALL 00408D84
0167:0047DF9E MOV EBX,EAX //两个字符转换成一个数b
0167:0047DFA0 CMP ESI,[EBP-0C]
0167:0047DFA3 JGE 0047DFA8
0167:0047DFA5 INC ESI
0167:0047DFA6 JMP 0047DFAD
0167:0047DFA8 MOV ESI,00000001
0167:0047DFAD MOV EAX,[EBP-08]
0167:0047DFB0 MOVZX EAX,BYTE PTR [ESI+EAX-01] //取出一个常数
0167:0047DFB5 XOR EAX,EBX //异或
0167:0047DFB7 MOV [EBP-18],EAX
0167:0047DFBA CMP EDI,[EBP-18] //根据大小做不同处理
0167:0047DFBD JL 0047DFCE
0167:0047DFBF MOV EAX,[EBP-18]
0167:0047DFC2 ADD EAX,000000FF
0167:0047DFC7 SUB EAX,EDI
0167:0047DFC9 MOV [EBP-18],EAX
0167:0047DFCC JMP 0047DFD1
0167:0047DFCE SUB [EBP-18],EDI
0167:0047DFD1 LEA EAX,[EBP-28]
0167:0047DFD4 MOV EDX,[EBP-18]
0167:0047DFD7 CALL 00403D54
0167:0047DFDC MOV EDX,[EBP-28]
0167:0047DFDF LEA EAX,[EBP-10]
0167:0047DFE2 CALL 00403E34
0167:0047DFE7 MOV EDI,EBX
0167:0047DFE9 ADD DWORD PTR [EBP-14],02
0167:0047DFED MOV EAX,[EBP-04]
0167:0047DFF0 CALL 00403E2C
0167:0047DFF5 CMP EAX,[EBP-14]
0167:0047DFF8 JG 0047DF72 //循环
0167:0047DFFE MOV EAX,[EBP+08]
0167:0047E001 MOV EDX,[EBP-10] //变换后的串
0167:0047E004 CALL 00403C48

日期、名字、注册码在注册表中和INI文件中都记录了。

如下是注册机。一个可用的注册码：
Name: China Cracker
Code: 832E09019806CDA317F3D468CEA9

#include <stdio.h>
#include <string.h>
#include <windows.h>

void main(void)
{

char table[] = { 0xE8, 0x9F, 0x73, 0xF7, 0xFF, 0xEB, 0xB2,
0x01, 0x8B, 0x83, 0x28, 0x03, 0xE8, 0x16,
0x26, 0xFA};
unsigned char name[120];
signed long code[128];
int k;
int len;
signed long temp, code1, code2;

printf("Input your name: ");
gets(name);

len = strlen(name);

//用GetTickCount( )模拟随机数
code[0] = GetTickCount( ) & 0x000000FFL;

for (k = 0; k < len; k++)
{
temp = code[k] + (long)name[k];

if (temp > 0xFF)
{
code[k+1] = (temp - 0x000000FFL) ^ ((long)table[k] & 0x000000FFL);
}
else
{
code[k+1] = temp ^ ((long)table[k] & 0x000000FFL);
}
}

printf("Your code is: ");
for ( k = 0; k < (len+1); k++)
{
printf("%02X", code[k] & 0xFF);
}
printf("\n");
}


HomeWatcher v1.2

 标 题:破解HomeWatcher v1.2 第一回合 (3千字)
发信人:DDXia
时 间:2000-3-4 11:39:44
详细信息:
最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。
破解HomeWatcher v1.2 第一回合（转载希望保持完整）

级别：入门级-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]

软件名称：HomeWatcher
整理日期：2000.2.27
最新版本：1.2 Beta 9
文件大小：968KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    能够定时拍照，能在景物发生变化时将照片保存下来，然后制作成网页，连接到internet，再通过FTP将照片上传
http://www.newhua.com/down/hw12.exe

第一回合较量。
用TRW2000，这个软件比较COOL。用了它就让我有难舍难分的感觉。尤其是它的PMODULE，令
我感慨无限，当然还有许多优点。

1、load HomeWatcher.exe
2、在Full Version 中填入注册码12345678(任意)。
3、bpx hmemcpy－－－－中断读写内存
4、按确定，就会被中断
5、pmodule
6、按F10,一直到出现“invalid key"
7、瞧一瞧
015F:004132B8 CALL `USER32!MessageBoxA`
^^^^^^^^^^^^^^^^^^^^^^^^^^^------------->出现错误窗口
015F:004132BD MOV Byte Ptr [ESP+70],00
015F:004132C2 MOV Byte Ptr [ESP+00000084],00

8、再往上瞧一瞧，都说了看人先看个大慨，然后再仔细看个究竟。

015F:00413284 CALL 0047B320
015F:00413289 POP ECX
015F:0041328A CMP EAX,00000011
015F:0041328D JNZ 004132A2
^^^^^^^^^^^^^^^^-------------------->这是出现错误窗口的跳转
试一试，改为JZ 结果可以自己试
015F:0041328F LEA EDX,[ESP+00000084]
015F:00413296 PUSH EDX
015F:00413297 CALL 0047B320
015F:0041329C POP ECX
015F:0041329D CMP EAX,00000010
015F:004132A0 JZ 004132CC
^^^^^^^^^^^^^^^^-------------------->看！还有一个跳转，对，对也要改为JNZ！
015F:004132A2 PUSH 00000030
015F:004132A4 PUSH 004A1E35
015F:004132A9 PUSH 004A1E28
015F:004132AE MOV EAX,[ESP+0C]
015F:004132B2 CALL 0045F960
015F:004132B7 PUSH EAX
015F:004132B8 CALL `USER32!MessageBoxA`
^^^^^^^^^^^^^^^^^^^^^^^^^^^------------->出现错误窗口
015F:004132BD MOV Byte Ptr [ESP+70],00
015F:004132C2 MOV Byte Ptr [ESP+00000084],00
015F:004132CA JMP 00413304
015F:004132CC PUSH 004A1E61
015F:004132D1 PUSH 004A1E41
015F:004132D6 LEA EDX,[ESP+000000A0]
015F:004132DD PUSH EDX
015F:004132DE CALL 0047D430
015F:004132E3 ADD ESP,0000000C
015F:004132E6 PUSH 00000030
015F:004132E8 PUSH 004A1E6D
015F:004132ED LEA ECX,[ESP+000000A0]
015F:004132F4 PUSH ECX
015F:004132F5 MOV EAX,[ESP+0C]
015F:004132F9 CALL 0045F960
015F:004132FE PUSH EAX
015F:004132FF CALL `USER32!MessageBoxA`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------------->这里也出现一个窗口，去瞧瞧。
015F:00413304 LEA EDX,[ESP+70]
015F:00413308 PUSH EDX

（快、快，肯定是THANK YOU！）噢！MY GOD 当场晕倒。“restar HomeWatcher to apply the changes”
(中文：重新启动HomeWatcher再改变版权）天啊！看来程序虽小，还真的放手严密！
想想还有什么招数！------反正我是饿了！是绝对的想不出来哦！

（待续）
完成时间
2000.2.27中午

标 题:破解HomeWatcher v1.2 第二回合 (6千字)
发信人:DDXia
时 间:2000-3-4 11:41:08
详细信息:

最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。
破解HomeWatcher v1.2 第二回合（转载希望保持完整）

级别：入门级-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]

软件名称：HomeWatcher
整理日期：2000.2.27
最新版本：1.2 Beta 9
文件大小：968KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    能够定时拍照，能在景物发生变化时将照片保存下来，然后制作成网页，连接到internet，再通过FTP将照片上传
http://www.newhua.com/down/hw12.exe

第二回合较量。
用TRW2000，看一看能否可以TRACE出它的注册码，当然我个人感觉有一点麻麻地（广东话）。Do my best！

再通看一遍程序（在出现错误窗口的时候）

015F:00413250 MOV CL,[EBX]
015F:00413252 MOV [EDI],CL
015F:00413254 INC DWord Ptr [ESP+08]
015F:00413258 INC EDI
015F:00413259 INC ESI
015F:0041325A INC EBX
015F:0041325B LEA EAX,[ESP+0C]
015F:0041325F PUSH EAX
015F:00413260 CALL 0047B320
^^^^^^^^^^^^^^^^-------------------------->注意这个CALL号
015F:00413265 POP ECX
015F:00413266 CMP EAX,ESI
015F:00413268 JA 00413232
015F:0041326A MOV EDX,[ESP+04]
015F:0041326E LEA EAX,[ESP+70]
015F:00413272 MOV Byte Ptr [ESP+1*EDX+70],00
015F:00413277 MOV ECX,[ESP+08]
015F:0041327B MOV Byte Ptr [ESP+1*ECX+00000084],00
015F:00413283 PUSH EAX
015F:00413284 CALL 0047B320
^^^^^^^^^^^^^^^^-------------------------->又注意这个CALL号
015F:00413289 POP ECX
015F:0041328A CMP EAX,00000011
015F:0041328D JNZ 004132A2----------->不等，KEY就非法
015F:0041328F LEA EDX,[ESP+00000084]
015F:00413296 PUSH EDX
015F:00413297 CALL 0047B320
^^^^^^^^^^^^^^^^-------------------------->又再注意这个CALL号
看来这软件的作者的CALL号一定是47B320
记得哦，去了美国，别忘了CALL他^_^
一定有鬼，去捉鬼好不好！可要带好武器喔！
015F:0041329C POP ECX
015F:0041329D CMP EAX,00000010
015F:004132A0 JZ 004132CC
015F:004132A2 PUSH 00000030
015F:004132A4 PUSH 004A1E35
015F:004132A9 PUSH 004A1E28
015F:004132AE MOV EAX,[ESP+0C]
015F:004132B2 CALL 0045F960
015F:004132B7 PUSH EAX
015F:004132B8 CALL `USER32!MessageBoxA`------出错窗口

想想清楚罗、（远处有一个鬼屋）开了门，就不要往回走罗！好！GO GO 按F8，进入 call 47b320
好象都是黑乎乎的代码！

015F:0047B320 MOV EAX,[ESP+04]------->EAX指向存KEY的地方 用D EAX 可以看到注册码

015F:0047B324 TEST AL,03
015F:0047B326 JNZ 0047B355
015F:0047B328 MOV EDX,[EAX]---------->把前四位，付给EDX，我的是1234。不过你看到是HEX

015F:0047B32A ADD EAX,00000004------->移动KEY的指针，到下四位。

015F:0047B32D MOV ECX,EDX
015F:0047B32F SUB EDX,01010101------->为什么都减1呢??我也不明白.

015F:0047B335 AND EDX,80808080------->为什么都AND 80呢???

015F:0047B33B JZ 0047B328
015F:0047B33D NOT ECX -------> 为什么??

015F:0047B33F AND EDX,ECX --------> 为什么??

经过反复多次的输入KEY值，跟踪、跟踪、再跟踪。我先说这段程序作用-----计算EAX指向的字符串的长度
这段的程序挺有趣的。可以分析一下。

几点TIPS： 1、HEX-01是判断当没有输入值的时候HEX为00
2、AND 80 因为能输入的字符的HEX都是小于80的
3、HEX是输入的键盘的16进制值，比如：'1'--->HEX为31。

015F:0047B341 JZ 0047B328
015F:0047B343 TEST DL,DL
015F:0047B345 JNZ 0047B36F
015F:0047B347 TEST DH,DH
015F:0047B349 JNZ 0047B370
015F:0047B34B TEST EDX,00FF0000
015F:0047B351 JNZ 0047B371
015F:0047B353 JMP 0047B372
015F:0047B355 ADD EAX,00000004
015F:0047B358 TEST Byte Ptr [EAX-04],FF
015F:0047B35C JZ 0047B36F
015F:0047B35E TEST Byte Ptr [EAX-03],FF
015F:0047B362 JZ 0047B370
015F:0047B364 TEST Byte Ptr [EAX-02],FF
015F:0047B368 JZ 0047B371
015F:0047B36A DEC EAX
015F:0047B36B AND AL,FC
015F:0047B36D JMP 0047B328
015F:0047B36F DEC EAX
015F:0047B370 DEC EAX
015F:0047B371 DEC EAX
015F:0047B372 MOV ECX,[ESP+04]
015F:0047B376 DEC EAX
015F:0047B377 SUB EAX,ECX ------->得出Key的长度,确切的说是EAX指向的字符串的长度
015F:0047B379 RET

既然读懂了子程序，再跳回来看它的程序。
015F:00413284 CALL 0047B320
^^^^^^^^^^^^^^^^
015F:00413289 POP ECX
015F:0041328A CMP EAX,00000011
^^^^^^^^------->看来是11位的，错应是0X11
015F:0041328D JNZ 004132A2----------->不等，KEY就说是非法
015F:0041328F LEA EDX,[ESP+00000084]

看来KEY是任意17位，YEAH!!!
试一试，噢，又是Invalid。

再看(眼睛好痛啊!!!)
015F:00413250 MOV CL,[EBX]
015F:00413252 MOV [EDI],CL
015F:00413254 INC DWord Ptr [ESP+08]
015F:00413258 INC EDI
015F:00413259 INC ESI
015F:0041325A INC EBX
015F:0041325B LEA EAX,[ESP+0C]
015F:0041325F PUSH EAX
015F:00413260 CALL 0047B320
^^^^^^^^^^^^^^^^
015F:00413265 POP ECX
015F:00413266 CMP EAX,ESI
015F:00413268 JA 00413232
以上程序是取键入KEY值的奇数位，-----------很容易的，自己去折磨一下，我现在手好累。*_*

015F:0041326A MOV EDX,[ESP+04]
015F:0041326E LEA EAX,[ESP+70]
015F:00413272 MOV Byte Ptr [ESP+1*EDX+70],00
015F:00413277 MOV ECX,[ESP+08]
015F:0041327B MOV Byte Ptr [ESP+1*ECX+00000084],00
015F:00413283 PUSH EAX
015F:00413284 CALL 0047B320
^^^^^^^^^^^^^^^^
015F:00413289 POP ECX
015F:0041328A CMP EAX,00000011
^^^^^^^^^^^^---------->因此KEY值是OX11*2=0X22=34(位)
计算真确，加10000分：）
为了好计算我输入1234567891234567891234567891234567（根据个人爱好）

015F:0041328D JNZ 004132A2----------->不等，KEY就非法
015F:0041328F LEA EDX,[ESP+00000084]
015F:00413296 PUSH EDX
015F:00413297 CALL 0047B320
^^^^^^^^^^^^^^^^---------------
015F:0041329C POP ECX
015F:0041329D CMP EAX,00000010
015F:004132A0 JZ 004132CC

填好后，按确定出现“restar HomeWatcher to apply the changes”，重新启动HomeWatcher，瞧一瞧
好象还是不行。没有关系，CRACK的精神就是一追到底，誓不休。说的远一点，可以培养每个人的坚定不移的
斗志。即使不作CRACKER，追女孩法则之一也是一追到底喔！：））

希望有些收获，我可不管这些，反正，我功力可是增加了3点!!!现在经验值是23点^_^

（待续）
完成时间
2000.2.28 23:08
费时3个小时

标 题:破解HomeWatcher v1.2 终结版 (17千字)
发信人:DDXia
时 间:2000-3-7 23:01:27
详细信息:

最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。

特别感谢：看雪、COOLFLY、八爪鱼、SUN BIRD、JOJO、洋白菜、JACK------给我极
大的精神支持和非常建议。（各家的经典经验，在文中都提到的哦！^_^)

破解HomeWatcher v1.2 终结版（转载希望保持完整）

级别：入门级-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]

软件名称：HomeWatcher
整理日期：2000.2.27
最新版本：1.2 Beta 9
文件大小：968KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    能够定时拍照，能在景物发生变化时将照片保存下来，然后制作成网页，连接到internet，再通过FTP将照片上传
http://www.newhua.com/down/hw12.exe

大结局：
风萧萧兮易水寒，壮士一去。。。。。（夕阳下，荒芜的沙漠，留下一步一行代码的脚印，延伸到远方）
苦苦追寻三天三夜，不辞劳苦，苦中做乐。YEAH。。。。。

此程序很小，但它的注册方式，正趋于流行，就是在填注册码时，有一个判断，
但不会判断它的对错，然后重新启动过程中，任意的一个地方，再进行判断，所以
难就难在找到那个位置。
[联想]
不过古人很早就说过：不入虎穴焉得虎子。想一想，其实古人很早就有CRACK的思想指导了，只不过由于当时的条件限制，说不定有甲古文写的CRACK教学。

破解工具：

REGMONITOR------注册表监视器
TRW2000 ------中国人的极品
W32DASM ------和TRW2000一样等级。
[联想]
准备进入战斗，变形。。。（卡）REGMONITOR变成我护目镜。唰、唰TRW2000
和W32DASM变成我的左臂右膀。YEAH。变形完毕。

填写完注册码后，运行REGMONITOR，单击“确定”，哈哈、千里眼报告前方有两
碉堡：
HKCU\Software\HomeWatcher.Com\SecuCam\AltA
HKCU\Software\HomeWatcher.Com\SecuCam\DetA

这两个键值分别储存注册码的奇数位和偶数位，同时也加密了。
想一想，如果它要判断注册码是否正确，一定会再次读出来进行判断，这是必然的，如何拦截呢？？？
TRW2000动态拦截读注册表BPX RegqueryValueEXA ,这个主意不错。唰、弹出TRW2000，pmodule 就到读DetA的地方。

为了便于理解，以下代码从W32DASM反编译中截取：
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405542(C)
|
:0040554E 8D95B4FEFFFF lea edx, dword ptr [ebp+FFFFFEB4]
:00405554 52 push edx
:00405555 8D8B0E120000 lea ecx, dword ptr [ebx+0000120E]
:0040555B 51 push ecx
:0040555C 6A00 push 00000000
:0040555E 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"DetA"
|
:00405560 682BDE4900 push 0049DE2B---------》存放字符串的指向

:00405565 8B83941D0000 mov eax, dword ptr [ebx+00001D94]
:0040556B 50 push eax

* Reference To: ADVAPI32.RegQueryValueExA, Ord:0000h
|
:0040556C E8436A0900 Call 0049BFB4---------》读注册表

:00405571 8D5588 lea edx, dword ptr [ebp-78]
:00405574 52 push edx
:00405575 8D8BB8030000 lea ecx, dword ptr [ebx+000003B8]
:0040557B 51 push ecx
:0040557C 6A00 push 00000000
:0040557E 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Host"
|
:00405580 6830DE4900 push 0049DE30
:00405585 8B83941D0000 mov eax, dword ptr [ebx+00001D94]
:0040558B 50 push eax

* Reference To: ADVAPI32.RegQueryValueExA, Ord:0000h
|
:0040558C E8236A0900 Call 0049BFB4
:00405591 8D5584 lea edx, dword ptr [ebp-7C]
:00405594 52 push edx
:00405595 8D8B80040000 lea ecx, dword ptr [ebx+00000480]
:0040559B 51 push ecx
:0040559C 6A00 push 00000000
:0040559E 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Port"
|
:004055A0 6835DE4900 push 0049DE35
:004055A5 8B83941D0000 mov eax, dword ptr [ebx+00001D94]
:004055AB 50 push eax

* Reference To: ADVAPI32.RegQueryValueExA, Ord:0000h
|
:004055AC E8036A0900 Call 0049BFB4
:004055B1 8D5580 lea edx, dword ptr [ebp-80]
:004055B4 52 push edx
:004055B5 8D8B8A040000 lea ecx, dword ptr [ebx+0000048A]
:004055BB 51 push ecx
:004055BC 6A00 push 00000000
:004055BE 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"User"
|
:004055C0 683ADE4900 push 0049DE3A
:004055C5 8B83941D0000 mov eax, dword ptr [ebx+00001D94]
:004055CB 50 push eax

* Reference To: ADVAPI32.RegQueryValueExA, Ord:0000h
|
:004055CC E8E3690900 Call 0049BFB4
:004055D1 8D957CFFFFFF lea edx, dword ptr [ebp+FFFFFF7C]
:004055D7 52 push edx
:004055D8 8D8BDA040000 lea ecx, dword ptr [ebx+000004DA]
:004055DE 51 push ecx
:004055DF 6A00 push 00000000
:004055E1 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Password"
|
:004055E3 683FDE4900 push 0049DE3F
:004055E8 8B83941D0000 mov eax, dword ptr [ebx+00001D94]
:004055EE 50 push eax

* Reference To: ADVAPI32.RegQueryValueExA, Ord:0000h
|
:004055EF E8C0690900 Call 0049BFB4
:004055F4 8D9578FFFFFF lea edx, dword ptr [ebp+FFFFFF78]
:004055FA 52 push edx
:004055FB 8D8B2A050000 lea ecx, dword ptr [ebx+0000052A]
:00405601 51 push ecx
:00405602 6A00 push 00000000
:00405604 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Pasv"
|
:00405606 6848DE4900 push 0049DE48
:0040560B 8B83941D0000 mov eax, dword ptr [ebx+00001D94]
:00405611 50 push eax

* Reference To: ADVAPI32.RegQueryValueExA, Ord:0000h
|
:00405612 E89D690900 Call 0049BFB4
:00405617 8D9574FFFFFF lea edx, dword ptr [ebp+FFFFFF74]
:0040561D 52 push edx
:0040561E 8D8B34050000 lea ecx, dword ptr [ebx+00000534]
:00405624 51 push ecx
:00405625 6A00 push 00000000
:00405627 6A00 push 00000000

读出后，并不立刻进行比较及判断，只是存在堆栈中。而且还不停的读注册表（REGMONITOR在它启动的时候，可以看到）。这样做的好处就是你对它还不死心。
一直按F10（本人有一点酱，所以不服它）
看到两段比较有趣的代码：
[第一段]重新组装带代码，我倒，它也会变形
:00407ED6 8B93B0030000 mov edx, dword ptr [ebx+000003B0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
存放"AltA" key的指向

:00407EDC 8B85F4FCFFFF mov eax, dword ptr [ebp+FFFFFCF4]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
存放重新组装的地址
:00407EE2 47 inc edi
:00407EE3 47 inc edi
:00407EE4 8A4C32FF mov cl, byte ptr [edx+esi-01]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
第一次 ESI=01 取"AltA"的第一位

:00407EE8 8808 mov byte ptr [eax], cl
:00407EEA FF85F4FCFFFF inc dword ptr [ebp+FFFFFCF4]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
存放重新组装的地址下一位

:00407EF0 8B93B4030000 mov edx, dword ptr [ebx+000003B4]
:00407EF6 8B85F4FCFFFF mov eax, dword ptr [ebp+FFFFFCF4]
:00407EFC 8A4C32FF mov cl, byte ptr [edx+esi-01]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
第一次 ESI=01 取"DetA"的第一位

:00407F00 8808 mov byte ptr [eax], cl
:00407F02 FF85F4FCFFFF inc dword ptr [ebp+FFFFFCF4]
:00407F08 46 inc esi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407ED4(U)
|
:00407F09 8B93B0030000 mov edx, dword ptr [ebx+000003B0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
存放"AltA" key的指向

:00407F0F 4A dec edx
:00407F10 52 push edx
:00407F11 E80A340700 call 0047B320----->取字符串长度
:00407F16 59 pop ecx
:00407F17 50 push eax
:00407F18 8B8BB4030000 mov ecx, dword ptr [ebx+000003B4]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
存放"DetA" key的指向

:00407F1E 49 dec ecx
:00407F1F 51 push ecx
:00407F20 E8FB330700 call 0047B320
:00407F25 59 pop ecx
:00407F26 5A pop edx
:00407F27 03D0 add edx, eax
:00407F29 3BD6 cmp edx, esi
:00407F2B 77A9 ja 00407ED6
:00407F2D C6843DDCF9FFFF00 mov byte ptr [ebp+edi-00000624], 00

[第二段]对照密码表转换。（具体的ESI、EDI的值实在是记不起来了，EVERYBODY
都可以DOWNLOAD它进行实习，我写的和破的软件都很新，终究一句话：修炼在个人

015F:0047F0C8 PUSH EBP
015F:0047F0C9 MOV EBP,ESP
015F:0047F0CB PUSH EBX
015F:0047F0CC PUSH ESI
015F:0047F0CD PUSH EDI
015F:0047F0CE XOR EDI,EDI
015F:0047F0D0 MOV ESI,[EBP+08]
015F:0047F0D3 MOV BL,[ESI]
015F:0047F0D5 INC ESI
015F:0047F0D6 MOVSX EAX,BL
015F:0047F0D9 PUSH EAX
015F:0047F0DA CALL 00480DAC------》进行转换（CALL的代码接着就是）
015F:0047F0DF POP ECX
015F:0047F0E0 TEST EAX,EAX
015F:0047F0E2 JNZ 0047F0D3
015F:0047F0E4 CMP BL,2B---------》为什么是比较2B、2D？？
015F:0047F0E7 JZ 0047F0EE
015F:0047F0E9 CMP BL,2D---------》是因为转换后的值都是小于等于30
015F:0047F0EC JNZ 0047F0FC
015F:0047F0EE CMP BL,2D---------》至少我的是
015F:0047F0F1 SETZ AL
015F:0047F0F4 AND EAX,00000001
015F:0047F0F7 MOV BL,[ESI]
015F:0047F0F9 INC ESI
015F:0047F0FA JMP 0047F114
015F:0047F0FC XOR EAX,EAX
015F:0047F0FE JMP 0047F114
015F:0047F100 MOVSX ECX,BL
015F:0047F103 MOV EDX,EDI
015F:0047F105 MOV BL,[ESI]
015F:0047F107 ADD EDX,EDX
015F:0047F109 LEA EDX,[EDX+4*EDX]
015F:0047F10C ADD EDX,ECX
015F:0047F10E ADD EDX,FFFFFFD0
015F:0047F111 INC ESI
015F:0047F112 MOV EDI,EDX
015F:0047F114 CMP BL,30
015F:0047F117 JL 0047F11E
015F:0047F119 CMP BL,39
015F:0047F11C JLE 0047F100
015F:0047F11E TEST EAX,EAX
015F:0047F120 JZ 0047F128
015F:0047F122 MOV EAX,EDI
015F:0047F124 NEG EAX
015F:0047F126 JMP 0047F12A
015F:0047F128 MOV EAX,EDI
015F:0047F12A POP EDI
015F:0047F12B POP ESI
015F:0047F12C POP EBX
015F:0047F12D POP EBP
015F:0047F12E RET

CALL 00480DAC的代码：
15F:00480DAC PUSH EBP
015F:00480DAD MOV EBP,ESP
015F:00480DAF MOV EAX,[EBP+08]
015F:00480DB2 CMP EAX,000000FF
015F:00480DB7 JNA 00480DBD
015F:00480DB9 XOR EAX,EAX
015F:00480DBB POP EBP
015F:00480DBC RET
015F:00480DAB RET
015F:00480DAC PUSH EBP
015F:00480DAD MOV EBP,ESP
015F:00480DAF MOV EAX,[EBP+08]
015F:00480DB2 CMP EAX,000000FF
015F:00480DB7 JNA 00480DBD
015F:00480DB9 XOR EAX,EAX
015F:00480DBB POP EBP
015F:00480DBC RET
015F:00480DBD MOVZX EDX,Word Ptr [004A883A+2*EAX]
^^^^^^^^^^^^^^^^^^^^^^^^^
这里就代码转换入口
015F:00480DC5 AND EDX,00000008
015F:00480DC8 MOV EAX,EDX
015F:00480DCA POP EBP
015F:00480DCB RET

接着就被程序的CALL----RET-----CALL-----RET----JMP----CALL----RET 弄得迷迷糊糊了两天两夜，工作有点烦。

与此同时，开始和文章开头的各位大虾（看雪、COOLFLY、八爪鱼、SUN BIRD、JOJO、洋白菜、JACK）“大呼小叫”，无论谁都回应，提出好的建议和鼓励。一人有难，
各路武林门派纷纷----几道寒光 刀出鞘

看雪兄： 试用W32DASM静态分析
COOLFLY兄： 拦截后，用F12进行消短（SOFT ICE）
八爪鱼兄： 工作忙得浇头滥额，还答应帮俺看。
SUN BIRD、JOJO兄： 同一武林门派，那还分谁和谁啊！
洋白菜兄： 多看一些外国的破文，更易提高功力级别。比如菠萝密经
JACK兄： 精神鼓励更重要----斗志比剑气更重要

于是采用[动、静结合，大处入手]

用W32DASM反编译后，再全部过一遍程序，从读取AltA和DetA值后，往后看是否有可
疑的地方。
找阿找 找阿找 找阿找。。。。。。
"Start of program"----程序开始，一定会有比较的：

* Possible StringData Ref from Data Obj ->"Start of program"
|
:00407FF4 6864E54900 push 0049E564
:00407FF9 53 push ebx
:00407FFA E8D1A7FFFF call 004027D0
:00407FFF 83C408 add esp, 00000008
:00408002 6A05 push 00000005
:00408004 8D8DEAF9FFFF lea ecx, dword ptr [ebp+FFFFF9EA]
:0040800A 51 push ecx
:0040800B 8D83B5160000 lea eax, dword ptr [ebx+000016B5]
:00408011 50 push eax
:00408012 E85D350700 call 0047B574
:00408017 83C40C add esp, 0000000C
:0040801A C683BA16000000 mov byte ptr [ebx+000016BA], 00
:00408021 6A06 push 00000006
:00408023 8D95EFF9FFFF lea edx, dword ptr [ebp+FFFFF9EF]
:00408029 52 push edx
:0040802A 8D8BBB160000 lea ecx, dword ptr [ebx+000016BB]
:00408030 51 push ecx
:00408031 E83E350700 call 0047B574
:00408036 83C40C add esp, 0000000C
:00408039 C683C116000000 mov byte ptr [ebx+000016C1], 00
:00408040 B101 mov cl, 01
:00408042 B201 mov dl, 01
:00408044 A12C5C4A00 mov eax, dword ptr [004A5C2C]
:00408049 E8BE760100 call 0041F70C
:0040804E 8983001F0000 mov dword ptr [ebx+00001F00], eax
:00408054 6A05 push 00000005
:00408056 8D85F5F9FFFF lea eax, dword ptr [ebp+FFFFF9F5]
:0040805C 50 push eax
:0040805D 8D93C2160000 lea edx, dword ptr [ebx+000016C2]
:00408063 52 push edx
:00408064 E80B350700 call 0047B574
:00408069 83C40C add esp, 0000000C
:0040806C C683C716000000 mov byte ptr [ebx+000016C7], 00
:00408073 6A03 push 00000003
:00408075 8D8DFAF9FFFF lea ecx, dword ptr [ebp+FFFFF9FA]
:0040807B 51 push ecx
:0040807C 8D83C8160000 lea eax, dword ptr [ebx+000016C8]
:00408082 50 push eax
:00408083 E8EC340700 call 0047B574
:00408088 C683CB16000000 mov byte ptr [ebx+000016CB], 00
:0040808F 83C40C add esp, 0000000C
:00408092 8D93A6160000 lea edx, dword ptr [ebx+000016A6]
:00408098 8995FCFCFFFF mov dword ptr [ebp+FFFFFCFC], edx
:0040809E 8B8DFCFCFFFF mov ecx, dword ptr [ebp+FFFFFCFC]
:004080A4 51 push ecx
:004080A5 E81E700700 call 0047F0C8
:004080AA 59 pop ecx
:004080AB 8BF0 mov esi, eax
:004080AD 8D83B5160000 lea eax, dword ptr [ebx+000016B5]
:004080B3 8985F8FCFFFF mov dword ptr [ebp+FFFFFCF8], eax
:004080B9 8B95F8FCFFFF mov edx, dword ptr [ebp+FFFFFCF8]
:004080BF 52 push edx
:004080C0 E803700700 call 0047F0C8
:004080C5 0FAFF0 imul esi, eax
:004080C8 8BC6 mov eax, esi
:004080CA 59 pop ecx
:004080CB 99 cdq
:004080CC B968030000 mov ecx, 00000368
:004080D1 F7F9 idiv ecx
:004080D3 899500FDFFFF mov dword ptr [ebp+FFFFFD00], edx
:004080D9 8B8500FDFFFF mov eax, dword ptr [ebp+FFFFFD00]
:004080DF 99 cdq
:004080E0 33C2 xor eax, edx
:004080E2 2BC2 sub eax, edx
:004080E4 8BF0 mov esi, eax
:004080E6 8D83C8160000 lea eax, dword ptr [ebx+000016C8]
:004080EC 898504FDFFFF mov dword ptr [ebp+FFFFFD04], eax
:004080F2 83C613 add esi, 00000013
:004080F5 8B9504FDFFFF mov edx, dword ptr [ebp+FFFFFD04]
:004080FB 52 push edx
:004080FC E8C76F0700 call 0047F0C8
:00408101 59 pop ecx
:00408102 3BF0 cmp esi, eax
^^^^^^^^^^^^^^
非常非常非常的可疑

:00408104 750C jne 00408112
^^^^^^^^^^^^^
用TRW2000改为jn如何，希望没有见意。
YEAH。。。YEAH。。。。。激动跳起来（老兄别人还在睡觉）
不管了，先来一段DISK何如？？武曲呢？谁的眼泪在飞。
导演兼主角：丁丁虾 （现实中没有办法实现，但我们可以有梦嘛^_^)

:00408106 C783E41D000001000000 mov dword ptr [ebx+00001DE4], 00000001
:00408110 EB08 jmp 0040811A

好想睡觉！啊！！！床 床在哪里？？？？？
决定要好好休息一个星期再破再写了。3月17、18日再见吧！！！！

感谢那些鼓励我的人！！！
衷心希望每个人都有一个好梦 ！！：）））

完成时间
2000.3.7 22:37
费时3天3夜

标 题:似乎只用改一个字节 (872字)
发信人:冰毒
时 间:2000-3-5 7:50:50
详细信息:

我用的版本为HomeWatcher 1.2 beta 9

若[ebx+00001DE4]=1且[ebx+00001DE8]=1, 程序就是Full Version.
只须改动一个字节
:00408102 3BF0 cmp esi, eax
:00408104 750C jne 00408112 <- 改jne为je
:00408106 C783E41D000001000000 mov dword ptr [ebx+00001DE4], 00000001
:00408110 EB08 jmp 0040811A
此后,程序会找HomeWatcher.lic文件. 而无论是否找到,当[ebx+00001DE4]=1且[ebx+00001DE8]=1时则为Full; 仅[ebx+00001DE8]=1为Lite+; 否则为Lite. 而事实上我们根本不用.lic文件,因为程序总会走到
:004081E5 83BBE41D000000 cmp dword ptr [ebx+00001DE4], 00000000
:004081EC 7424 je 00408212 <- 因这里不会跳走,所以...
:004081EE C783E81D000001000000 mov dword ptr [ebx+00001DE8], 00000001
:004081F8 33D2 xor edx, edx
不过我没法试程序是否真的100%破解了,只有试了才可肯定可以不用.lic文件.


impex 2.0,3.0

 标 题:请高手破此软件, impex 2.0,3.0. 郭大志老师请看(correct url) (144字)
发信人:letterweb
时 间:2000-6-8 14:44:44
详细信息:
URL: http://bluecoffee.163.net/new.htm

输入试验注册码号没有信息, 用TRW 干脆就不能输入试验码.

是用VFOXPRO6.0编程,
是不是试用版, 无法破解?

标 题:既是FoxPro程序，用反编译程序试试，用SoftICE或TRW跟是一种痛苦，在VFP6R.DLL中出不来 (155字)
发信人:郭大志
时 间:2000-6-8 18:15:00
详细信息:

它的序列号放在c:\windows\system\serial.sys中。估计把这个文件拷到别的机器上就能用同样的注册码注册。

BTW，请不要叫我老师，岂敢好为人师，大家讨论讨论而已。

标 题:到目前为止得到的结果如下 (3千字)
发信人:郭大志
时 间:2000-6-8 20:16:33
详细信息:

序列号放在c:\windows\system\serial.sys中，
注册码放在c:\windows\system\secret.sys中。
这两个文件都是加密过的，算法很简单，用unfoxall（我只有demo版，而且这个demo版的40个文件限制无法去除，因强行修改40个文件限制会死机）对serial.exe进行反编译可以得到其加密和解密的算法。如下：

加密算法：
PROCEDURE secret
PARAMETER CSTRING
ESTRING = ''
NLONG = LEN(CSTRING)
FOR I = 1 TO NLONG
ESTRING = ESTRING + CHR(ASC(SUBSTR(CSTRING,I,1)) + I + NLONG)
ENDFOR
RETURN ESTRING
ENDPROC

解密算法：
PROCEDURE desecret
PARAMETER CSTRING
ESTRING = ''
NLONG = LEN(CSTRING)
FOR I = 1 TO NLONG
ESTRING = ESTRING + CHR(ASC(SUBSTR(CSTRING,I,1)) - I - NLONG)
ENDFOR
RETURN ESTRING
ENDPROC

用SoftICE跟踪它读取注册码后判断的过程，知道上述解密算法对应的汇编程序段如下：
0167:0C0746D7 MOV ESI,ECX
0167:0C0746D9 MOV EAX,[ESI] //取一个字节
0167:0C0746DB SUB EAX,[EDX] //相减
0167:0C0746DD JO 0C12995B
0167:0C0746E3 MOV [ESI],EAX
0167:0C0746E5 SUB EAX,EAX

解开一个字符后，回到下面的地方，把解开的字符保存起来：

0167:0C018C1F CALL 0C00CDEB //解开一个字符
0167:0C018C24 MOV ESI,EAX //EAX中存放该字符
0167:0C018C26 MOV ECX,ESI
0167:0C018C28 CALL 0C018C75
0167:0C018C2D CMP ESI,000000FF
0167:0C018C33 MOV EDI,EAX
0167:0C018C35 JA 0C0D95E5
0167:0C018C3B MOV EDX,EDI
0167:0C018C3D LEA ECX,[ESP+0E]

之后它要把你输入的8位的注册码的前4位和后四位调换一下，比如我输入的为“12345678”，调换后变成“56781234”，
然后转换成一个数，对此数进行简单的浮点运算。

0167:0C09F332 LEA EAX,[EDI*4+EDI]
0167:0C09F335 LEA EDI,[EAX*2+ECX-30] //每次转换一个字符
0167:0C09F339 MOV AL,[ESP+11]
0167:0C09F33D INC ESI
0167:0C09F33E TEST AL,AL
0167:0C09F340 JNZ 0C09F383
0167:0C09F342 XOR ECX,ECX
0167:0C09F344 MOV CL,[ESI]
0167:0C09F346 LEA EAX,[ECX-30]
0167:0C09F349 CMP EAX,35
0167:0C09F34C JA 0C09F367
0167:0C09F34E XOR EDX,EDX
0167:0C09F350 MOV DL,[EAX+0C09F424]
0167:0C09F356 JMP [EDX*4+0C09F410]
0167:0C09F35D MOV EAX,[ESP+18]
0167:0C09F361 TEST EAX,EAX
0167:0C09F363 JZ 0C09F339
0167:0C09F365 JMP 0C09F311
0167:0C09F367 MOV CL,[ESP+2C]
0167:0C09F36B MOV AL,[ESI]
0167:0C09F36D CMP AL,CL
0167:0C09F36F JZ 0C09F378
0167:0C09F371 MOV BYTE PTR [ESP+11],01
0167:0C09F376 JMP 0C09F339
0167:0C09F378 MOV [ESP+11],BL
0167:0C09F37C MOV EBX,00000001
0167:0C09F381 JMP 0C09F339
0167:0C09F383 MOV EAX,[ESP+24]
0167:0C09F387 MOV DL,[ESP+13]
0167:0C09F38B MOV [ESP+14],EDI //保存转换结果
0167:0C09F38F MOV [EAX],DL
0167:0C09F391 MOV AL,[ESP+12]
0167:0C09F395 TEST AL,AL
0167:0C09F397 JNZ 0C0EC5A9
0167:0C09F39D MOV EAX,[ESP+18]
0167:0C09F3A1 CMP EAX,09
0167:0C09F3A4 JG 0C0EC5BE
0167:0C09F3AA FILD DWORD PTR [ESP+14] //转换结果变成浮点数

离找到注册码还差一步，用SoftICE跟实在太累！

标 题:搞定了 (1千字)
发信人:郭大志
时 间:2000-6-9 17:36:34
详细信息:

 谢谢letterweb。我下载了unfoxall之后，反编译，找到如下判断注册码的代码，有了源程序显然很简单，如下：
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
*  文件名: CHECKSN.PRG <-- 本文件由 UnFoxAll 创建
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

IF  .NOT. FILE((CSERIAL)) .OR.  .NOT. FILE((CSECRET))  //检查文件cserial.sys和csecret.sys是否存在
LREGISTER = .F.    //不存在就未注册
DO CHECKEXP        //检查是否过期
ELSE
NSERIAL = FOPEN((CSERIAL))      //打开cserial.sys
NSIZE = FSEEK(NSERIAL,0,2)
= FSEEK(NSERIAL,0,0)
NO = FREAD(NSERIAL,NSIZE)        //读取序列号
NO = DESECRET(NO)
        //解密序列号
= FCLOSE(NSERIAL)
NSECRET = FOPEN((CSECRET))  //打开csecret.sys
NSIZE = FSEEK(NSECRET,0,2)
= FSEEK(NSECRET,0,0)
CKEY = FREAD(NSECRET,NSIZE)  //读取注册码
CKEY = DESECRET(CKEY)
  //解密注册码
= FCLOSE(NSECRET)
KEY1 = SUBSTR(CKEY,1,4)          //注册码的前四位
KEY2 = SUBSTR(CKEY,5,8)          //注册码的后四位
CKEY = KEY2 + KEY1
      //前四位和后四位交换了一下
CKEY = STR(VAL(CKEY) - 550331,8) //减去550331
IF CKEY <> NO
                    //差等于序列号吗？
LREGISTER = .F.
              //不等则未注册
DO CHECKEXP
              //检查是否过期
ELSE
LREGISTER = .T.
              //注册用户
ENDIF
ENDIF

至此可以很轻易地写出注册机。checkexp.prg是对时间进行判断，即判是否过期，时间放在文件setdate.sys中。

BTW：我下载的unfoxall中带的敌后武工队的注册机怎么不灵光，只好自己把unfoxall搞定了。

标 题:try (461字)
发信人:郭大志
时 间:2000-6-10 0:09:04
详细信息:

#include <stdio.h>

void main(void)
{

long serial;
int k;
char buf[32];

printf("Input your serial:");
scanf("%lu", &serial);

serial += 550331L;
sprintf(buf, "%08lu", serial);

printf("Your registration code is :");
for(k = 4; k < 8; k++) putchar(buf[k]);
for(k = 0; k < 4; k++) putchar(buf[k]);
putchar('\n');
}

实际上可以不用注册机，把别人的serial.sys 和secret.sys拷过来就可以用。


IP Tools v1.07

 标 题:用W32DASM破解IP Tools v1.07 初级 (8千字)
发信人:DDXia
时 间:2000-2-27 12:27:57
阅读次数:546
详细信息:
用W32DASM破解IP Tools v1.07（转载希望保持完整）
作者：丁丁虾 又名：DDXia [CCG]
IP Tools最新版本：1.07
文件大小：722KB
软件授权：共享软件
使用平台：Win95/98/2000/NT

软件简介：
    集成了许多TCP/IP实用工具于一体，比如本地信息、连接信息、端口扫描、PING、TRACE、WHOIS、FINGER、NSLOOKUP、Telnet客户端、 NETBIOS信息、IP监视器等等
http://www.newhua.com/down/ip-tools.exe

上 W32DASM！我掩护！把它载入W32DASM，Search Strings---也就是注册失败时，跳出对话框中的羊肉串---->"Sorry, but Name or Registration "

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0048F771(C), :0048F78B(C), :0048F7C6(C), :0048F7EE(C)
|

* Possible StringData Ref from Code Obj ->"Sorry, but Name or Registration "
->"number is wrong !"
|
:0048F927 B884FA4800 mov eax, 0048FA84
:0048F92C E80F28FBFF call 00442140

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0048F709(C), :0048F925(U)
|
:0048F931 33C0 xor eax, eax
:0048F933 5A pop edx
:0048F934 59 pop ecx
:0048F935 59 pop ecx
:0048F936 648910 mov dword ptr fs:[eax], edx

这回可不能按老方法啦！信息的上方可以看到如下四个地址:
:0048F771(C), :0048F78B(C), :0048F7C6(C), :0048F7EE(C)
瞧一瞧是什么的家伙！

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048F699(C)
|
:0048F6BB 51 push ecx
:0048F6BC 51 push ecx
:0048F6BD 51 push ecx
:0048F6BE 53 push ebx
:0048F6BF 56 push esi
:0048F6C0 57 push edi
:0048F6C1 8BD8 mov ebx, eax
:0048F6C3 8B3D1CCB4A00 mov edi, dword ptr [004ACB1C]
:0048F6C9 33C0 xor eax, eax
:0048F6CB 55 push ebp
:0048F6CC 685CF94800 push 0048F95C
:0048F6D1 64FF30 push dword ptr fs:[eax]
:0048F6D4 648920 mov dword ptr fs:[eax], esp
:0048F6D7 8B1524CA4A00 mov edx, dword ptr [004ACA24]
:0048F6DD 8B12 mov edx, dword ptr [edx]
:0048F6DF 8B07 mov eax, dword ptr [edi]
:0048F6E1 8B80F0010000 mov eax, dword ptr [eax+000001F0]
:0048F6E7 E8C82CF9FF call 004223B4
:0048F6EC 8B15CCC84A00 mov edx, dword ptr [004AC8CC]
:0048F6F2 8B12 mov edx, dword ptr [edx]
:0048F6F4 8B07 mov eax, dword ptr [edi]
:0048F6F6 8B80F4010000 mov eax, dword ptr [eax+000001F4]
:0048F6FC E8B32CF9FF call 004223B4
:0048F701 8B07 mov eax, dword ptr [edi]
:0048F703 E80812FAFF call 00430910
:0048F708 48 dec eax
:0048F709 0F8522020000 jne 0048F931
:0048F70F 8D55F8 lea edx, dword ptr [ebp-08]
:0048F712 8B07 mov eax, dword ptr [edi]
:0048F714 8BB0F0010000 mov esi, dword ptr [eax+000001F0]
:0048F71A 8BC6 mov eax, esi
:0048F71C E8632CF9FF call 00422384
:0048F721 8B45F8 mov eax, dword ptr [ebp-08]
:0048F724 8D55FC lea edx, dword ptr [ebp-04]
:0048F727 E8D87FF7FF call 00407704
:0048F72C 8B55FC mov edx, dword ptr [ebp-04]
:0048F72F 8BC6 mov eax, esi
:0048F731 E87E2CF9FF call 004223B4
:0048F736 8D55F8 lea edx, dword ptr [ebp-08]
:0048F739 8B07 mov eax, dword ptr [edi]
:0048F73B 8BB0F4010000 mov esi, dword ptr [eax+000001F4]
:0048F741 8BC6 mov eax, esi
:0048F743 E83C2CF9FF call 00422384
:0048F748 8B45F8 mov eax, dword ptr [ebp-08]
:0048F74B 8D55FC lea edx, dword ptr [ebp-04]
:0048F74E E8B17FF7FF call 00407704
:0048F753 8B55FC mov edx, dword ptr [ebp-04]
:0048F756 8BC6 mov eax, esi
:0048F758 E8572CF9FF call 004223B4
:0048F75D 8D55F8 lea edx, dword ptr [ebp-08]
:0048F760 8B07 mov eax, dword ptr [edi]
:0048F762 8B80F0010000 mov eax, dword ptr [eax+000001F0]
:0048F768 E8172CF9FF call 00422384
:0048F76D 837DF800 cmp dword ptr [ebp-08], 00000000
:0048F771 0F84B0010000 je 0048F927
^^^^^^^^^^^----->

:0048F777 8D55F4 lea edx, dword ptr [ebp-0C]
:0048F77A 8B07 mov eax, dword ptr [edi]
:0048F77C 8B80F4010000 mov eax, dword ptr [eax+000001F4]
:0048F782 E8FD2BF9FF call 00422384

:0048F787 837DF400 cmp dword ptr [ebp-0C], 00000000
:0048F78B 0F8496010000 je 0048F927
^^^^^^^^^^^----->

:0048F791 8D55F0 lea edx, dword ptr [ebp-10]
:0048F794 8B07 mov eax, dword ptr [edi]
:0048F796 8B80F0010000 mov eax, dword ptr [eax+000001F0]
:0048F79C E8E32BF9FF call 00422384
:0048F7A1 8B45F0 mov eax, dword ptr [ebp-10]
:0048F7A4 E80792FFFF call 004889B0
:0048F7A9 8BF0 mov esi, eax
:0048F7AB 8D55F0 lea edx, dword ptr [ebp-10]
:0048F7AE 8B07 mov eax, dword ptr [edi]
:0048F7B0 8B80F4010000 mov eax, dword ptr [eax+000001F4]
:0048F7B6 E8C92BF9FF call 00422384
:0048F7BB 8B45F0 mov eax, dword ptr [ebp-10]
:0048F7BE E87992FFFF call 00488A3C

:0048F7C3 663BF0 cmp si, ax
:0048F7C6 0F855B010000 jne 0048F927
^^^^^^^^^^^----->

:0048F7CC A148C94A00 mov eax, dword ptr [004AC948]
:0048F7D1 BAFF010000 mov edx, 000001FF
:0048F7D6 E8BD91FFFF call 00488998
:0048F7DB 8BF0 mov esi, eax
:0048F7DD A19CC84A00 mov eax, dword ptr [004AC89C]
:0048F7E2 BAFF010000 mov edx, 000001FF
:0048F7E7 E8AC91FFFF call 00488998

:0048F7EC 3BF0 cmp esi, eax
:0048F7EE 0F8533010000 jne 0048F927
^^^^^^^^^^^----->

:0048F7F4 8D55F8 lea edx, dword ptr [ebp-08]
:0048F7F7 8B07 mov eax, dword ptr [edi]
:0048F7F9 8B80F0010000 mov eax, dword ptr [eax+000001F0]
:0048F7FF E8802BF9FF call 00422384
:0048F804 8B55F8 mov edx, dword ptr [ebp-08]
:0048F807 A124CA4A00 mov eax, dword ptr [004ACA24]
:0048F80C E89744F7FF call 00403CA8
:0048F811 8D55F8 lea edx, dword ptr [ebp-08]
:0048F814 8B07 mov eax, dword ptr [edi]
:0048F816 8B80F4010000 mov eax, dword ptr [eax+000001F4]
:0048F81C E8632BF9FF call 00422384
:0048F821 8B55F8 mov edx, dword ptr [ebp-08]
:0048F824 A1CCC84A00 mov eax, dword ptr [004AC8CC]
:0048F829 E87A44F7FF call 00403CA8
:0048F82E 8BC3 mov eax, ebx
:0048F830 E877FAFFFF call 0048F2AC

以上的跳转都是没有交钱就有你好看的！
往下看，离它对你说“Thank You”很近了，加油哦^_^
怎么处理上面四个保镖就看你们的罗：） 问我！我功力比较低刚10点，只好
动粗啦，全部nop掉。爽.......哈...哈..哈.
* Possible StringData Ref from Code Obj ->"Thank You for registering"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
----->好亲热的话语，我中听！
|
:0048F835 B874F94800 mov eax, 0048F974
:0048F83A E80129FBFF call 00442140
:0048F83F B201 mov dl, 01
:0048F841 A16C364300 mov eax, dword ptr [0043366C]
:0048F846 E8B53FFAFF call 00433800
:0048F84B 8BD8 mov ebx, eax
:0048F84D B101 mov cl, 01

来来，干一杯水、庆贺一下。刚刚想去解决一下温饱问题，一运行，到没有看见
Thank you 和 Sorry,反到看见了"Program was corrupted!!"没有搞错吧！居然
用过去时，明明是正在进行嘛！不管了，我可要去吃一点饼干罗! :))
(评语：这家伙连一点责任心都没有，唉，一代不如一代啦）

(待续）
完成时间
2000.2.19 中午16:18
耗时暂时不知道 :((

标 题:用W32DASM破解IP Tools版本：1.07(下） (3千字)
发信人:DDXia
时 间:2000-3-4 11:15:11
详细信息:

用W32DASM破解IP Tools最新版本：1.07（转载希望保持完整）
作者：丁丁虾 又名：DDXia[CCG]

回来啦！come on! 上回可能是太饿的缘故。
从头瞧一便是什么故障！如果实在不行的化，干脆，把电脑从四楼扔下去，然后
再下楼拣回来用，那时一定很理智！^_^
先是出现"Self test.." ,然后就出现"Program was corrupted !"，外国人老早
就知道你会修改那跳转的地方！说不定他就是cracker!，不过，他还是很好心的
告诉你，我正在自检，请勿打扰！看来他早有准备，幸好是没有格式化我的硬盘。
否则不是电脑下去了，我就先行一步.....（干嘛！干嘛！）...别打岔，回老家
种田去。

其实也容易的，出乎意料的，竟然可以查到"Program was corrupted !"
程序如下：

* Possible StringData Ref from Code Obj ->"] Self test .."
|
:004A6958 68506C4A00 push 004A6C50
:004A695D 8D45F0 lea eax, dword ptr [ebp-10]
:004A6960 BA03000000 mov edx, 00000003
:004A6965 E826D6F5FF call 00403F90
:004A696A 8B55F0 mov edx, dword ptr [ebp-10]
:004A696D 8B03 mov eax, dword ptr [ebx]
:004A696F 8B80DC010000 mov eax, dword ptr [eax+000001DC]
:004A6975 8B8030010000 mov eax, dword ptr [eax+00000130]
:004A697B 8B08 mov ecx, dword ptr [eax]
:004A697D FF5134 call [ecx+34]
:004A6980 E81FD0FDFF call 004839A4
:004A6985 8B1554C84A00 mov edx, dword ptr [004AC854]

:004A698B 3B82B4000000 cmp eax, dword ptr [edx+000000B4]
:004A6991 740F je 004A69A2
^^^^^^^^^^^---->这句很明显的就是让我们

JMP
有兴趣的跟踪以上的程序，大大可以提高功力

！
* Possible StringData Ref from Code Obj ->"Program was corrupted !"
|
:004A6993 B8686C4A00 mov eax, 004A6C68
:004A6998 E8A3B7F9FF call 00442140
:004A699D E93C020000 jmp 004A6BDE

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004A6991(C)
|
:004A69A2 68306C4A00 push 004A6C30
:004A69A7 E89C22F6FF call 00408C48
:004A69AC 83C4F8 add esp, FFFFFFF8
:004A69AF DD1C24 fstp qword ptr [esp]
:004A69B2 9B wait
:004A69B3 8D45EC lea eax, dword ptr [ebp-14]
:004A69B6 E81D2EF6FF call 004097D8
:004A69BB FF75EC push [ebp-14]

* Possible StringData Ref from Code Obj ->"] App Init .."
|
:004A69BE 68886C4A00 push 004A6C88
:004A69C3 8D45F0 lea eax, dword ptr [ebp-10]
:004A69C6 BA03000000 mov edx, 00000003
:004A69CB E8C0D5F5FF call 00403F90
:004A69D0 8B55F0 mov edx, dword ptr [ebp-10]
:004A69D3 8B03 mov eax, dword ptr [ebx]
:004A69D5 8B80DC010000 mov eax, dword ptr [eax+000001DC]
:004A69DB 8B8030010000 mov eax, dword ptr [eax+00000130]
:004A69E1 8B08 mov ecx, dword ptr [eax]
:004A69E3 FF5134 call [ecx+34]

OK!可以收工了吗？问它吧，现在是它说了算！启动运行，没有事，注册，Thank

you。再运行一下，又有毛病了！！！有完没完的，真是过分！不和你玩！（即时评

语：又在耍小孩子脾气！）说什么呢？？？哼！我跟你没有完！开始启用另一利器

------
-------》》REGMONITOR--Regmonitor，顿时把它看得个清清楚楚、明明白白。
原来它把USER和PASS放在注册表中，而且还加了密！挺有责任心的，是位好同志！
在下面注册表中

HKCU\Software\Microsoft\Windows\CurrentVersion\Devices\0010\DATA1

SUCCESS "31323132"
^^^^^^^----> 同下---这些已经是我填好的，原来都是乱码

HKCU\Software\Microsoft\Windows\CurrentVersion\Devices\0010\DATA2

SUCCESS "3132303435"
^^^^^^^^^^--->随便填一些正常数字，

不玩了，不玩了！今天是元宵，又是星期六。睡觉，我的最爱 ^_^
完成时间
2000.2.19 中午17:20
耗2小时又34分钟外带20分的中餐时间


IP搜索客 1.61

 标 题:IP搜索客 1.61 注册码计算 (2千字)
发信人:小楼
时 间:2000-5-16 11:19:48
详细信息:
IP搜索客 1.61 注册码计算

这个软件可以根据对方的IP地址查到他的位置和ISP.可以轻松的查出给你发信人的位置,你就可以知道你的那些通过E-mail交流的网友都是哪里的人了以及他的ISP.(如:上海CHINANET(163)用户).本软件使用屏幕取词式操作(和金山词霸一样),只需将鼠标指到IP地址上就可以将它的地理位置在鼠标下方的浮动窗口中显示出来,并且可以将显示的内容复制到剪贴板.
下载地址 http://greenstuff.363.net

首先随便输入147258369，得到告示：注册码错误。
然后用ultraedit打开ipseeker.exe，找到“注册码错误”，改为aaaaa，你还会找到“注册成功”，也改为dddd。保存后用W32DASM反汇编，如下
* Possible StringData Ref from Data Obj ->"dddddd" 注册成功
|
:00403E54 68D8414300 push 004341D8
:00403E59 8BC8 mov ecx, eax
:00403E5B E8034B0200 call 00428963

......

* Possible StringData Ref from Data Obj ->"aaaaaaaaaa" 注册失败
|
:00403EC9 68B4414300 push 004341B4
:00403ECE 8BC8 mov ecx, eax
:00403ED0 E88E4A0200 call 00428963

向上看，
:00403D64 8BCE mov ecx, esi
:00403D66 E8E5040000 call 00404250 <-- 比较核心
:00403D6B 85C0 test eax, eax
<-- 注册标志，eax=1
:00403D6D 0F8427010000 je 00403E9A

在:00403D66 E8E5040000 call 00404250 进入，走到
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004044F6(C)
|
:004044D8 8A10 mov dl, byte ptr [eax]
:004044DA 8ACA mov cl, dl
:004044DC 3A16 cmp dl, byte ptr [esi]
:004044DE 751C jne 004044FC
:004044E0 84C9 test cl, cl
:004044E2 7414 je 004044F8
:004044E4 8A5001 mov dl, byte ptr [eax+01]
:004044E7 8ACA mov cl, dl
:004044E9 3A5601 cmp dl, byte ptr [esi+01]
:004044EC 750E jne 004044FC
:004044EE 83C002 add eax, 00000002
:004044F1 83C602 add esi, 00000002
:004044F4 84C9 test cl, cl
:004044F6 75E0 jne 004044D8

这里就是注册码比较的计算。
每次程序依次取两位，放入byte ptr [esi]，byte ptr [esi+1]，与eax, eax+1比较。如此循环。这样正确的注册码只要在
:004044DC 3A16 cmp dl, byte ptr [esi] 处 d eax, d eax+1即可。
如此抄下，最后我的注册码为 ：5FBA49AD1C7CA39B


IQ网际搜寻家99

 标 题:如何计算 “IQ网际搜寻家99” 注册码 (4千字)
发信人:小楼
时 间:2000-5-15 23:46:32
详细信息:
如何计算 “IQ网际搜寻家99” 注册码

“IQ网际搜寻家99”是资讯人公司出品的一个功能十分强大的搜索引擎，获得zdnet五星奖。
下载地址http://www.inforian.com/ ，约3M左右，可以支持中文GB、BIG5、英文等语言。
开始我在网上找了一个注册码，但每次运行时程序都会叫你去资讯人公司主页注册。当然你是不能注册的，因为这个注册码早就被注册了。忍无可忍之下，今天我准备将其注册码计算方式找到，自己注册一个。
IQ99.exe被shrink3.4压过，你可以用deshrink1.6解压，不过不这样作也没关系，因为其比较程序是在checknodll.dll中。

首先，你要随便输入一个注册码，01234567895 （11位）
trw2000中下断点
bpx hmemcpy
g
回到IQ99.exe中，按下“注册”按钮，trw跳出。
bd 中断断点
F12 14下
F10 走到

* Possible StringData Ref from Code Obj ->"bCheckSerialNumber"
|
:004C2CD1 A168205000 mov eax, dword ptr [00502068]
:004C2CD6 E8B512F4FF call 00403F90
:004C2CDB 50 push eax
:004C2CDC 8B45F4 mov eax, dword ptr [ebp-0C]
:004C2CDF 50 push eax

* Reference To: kernel32.GetProcAddress, Ord:0000h
|
:004C2CE0 E8BB2EF4FF Call 00405BA0
:004C2CE5 8BF8 mov edi, eax
:004C2CE7 89FB mov ebx, edi
:004C2CE9 85FF test edi, edi <--没有输入，失败
:004C2CEB 7417 je 004C2D04
:004C2CED 8B45FC mov eax, dword ptr [ebp-04]
:004C2CF0 E89B12F4FF call 00403F90
:004C2CF5 50 push eax
:004C2CF6 56 push esi
:004C2CF7 FFD3 call ebx <--**
:004C2CF9 83C408 add esp, 00000008
:004C2CFC 3C01 cmp al, 01 <--以al=1作为注册标志
:004C2CFE 7504 jne 004C2D04 <--跳则失败
:004C2D00 C645FB00 mov [ebp-05], 00

现在你要进入:004C2CF7 FFD3 call ebx 中看看al是如何被赋值的，F8进入
这就进入了checknodll.dll领域了。
:100010EB 83F90B cmp ecx, 0000000B <--注册码是否11位？
:100010EE 0F85AA000000 jne 1000119E
:100010F4 33FF xor edi, edi
......
:10001111 mov [esp+0C], 00000007 <-- 1 -
:10001119 mov [esp+10], 00000011 <-- 2 |
:10001121 mov [esp+14], 00000017 <-- 3 |
:10001129 mov [esp+18], 00000025 <-- 4 |
:10001131 mov [esp+1C], 0000002F <-- 5 |--依次对应注册码
:10001139 mov [esp+20], 00000035 <-- 6 | 1-9位
:10001141 mov [esp+24], 00000043 <-- 7 |
:10001149 mov [esp+28], 00000049 <-- 8 |
:10001151 mov [esp+2C], 00000053 <-- 9 -
:10001159 mov eax, ebx
:1000115B xor ecx, ecx
:1000115D lea edx, dword ptr [esp+0C]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10001174(C)
|
:10001161 0FBE3C31 movsx edi, byte ptr [ecx+esi]
:10001165 83EF30 sub edi, 00000030
<--依次取1-9位注册码的数字
:10001168 0FAF3A imul edi, dword ptr [edx]
<--各位数与上述数字对应相乘
:1000116B 03C7 add eax, edi <--总和给eax
:1000116D 41 inc ecx
:1000116E 83C204 add edx, 00000004
:10001171 83F909 cmp ecx, 00000009
:10001174 7CEB jl 10001161
:10001176 0FBE4E09 movsx ecx, byte ptr [esi+09]
<-- 第十位注册码的ascii码给ecx
:1000117A 0FBE560A movsx edx, byte ptr [esi+0A]
<-- 第十一位注册码的ascii码给edx
:1000117E 8D0C89 lea ecx, dword ptr [ecx+4*ecx]
<-- ecx=5*第十位注册码的ascii码
:10001181 BE64000000 mov esi, 00000064
:10001186 5F pop edi
:10001187 8D8C4AF0FDFFFF lea ecx, dword ptr [edx+2*ecx-00000210]
<-- ecx= 第十一位注册码的ascii码
+ (A*第十位注册码的ascii码)
- 210
:1000118E 99 cdq
:1000118F F7FE idiv esi <-- edx为eax/64的余数
:10001191 33C0 xor eax, eax
:10001193 5E pop esi
:10001194 5B pop ebx
:10001195 3BCA cmp ecx, edx <-- 比较
:10001197 0F94C0 sete al <-- al赋值

所以我计算出一个：01234567804
不要用这个去网站注册，因为我已经用了。要注册，自己算。
不知谁将这个计算式作一注册机？请在其中写上我的名字：小楼
谢谢。

标 题:如何除去“IQ网际搜寻家99”中“网上注册”窗口 (881字)
发信人:小楼
时 间:2000-5-16 20:17:54
详细信息:

如何除去“IQ网际搜寻家99”中“网上注册”窗口
今天我算出了“iq网际搜索99”的注册码计算方法，当然要去其网站登记为“合法用户”--主要是为了除去每次运行时出现的那个“网上注册”破窗户。谁知道在线注册后，破窗仍旧出现。所以，我就写了封e-mail给他们，要求服务——谁叫我是“正式用户”呢，当然要享受这一“权利”。
老美动作就是快，上午同时寄出的两封信，一封给总部，一封给它国内子公司。现在我收到了总部的答复，给了我一个补丁程序，说run it , and ok.当然我执行了，问题就解决了。
但是它作了些什么？脑子一转，猜它在注册表中作了记号。联想到微软是在注册表中加入"register"=1作为注册标志。就在[HKEY_USERS\.DEFAULT\Software\Inforia\Quest\SYSTEM]中找，果然，其注册标志为
[HKEY_USERS\.DEFAULT\Software\Inforia\Quest\SYSTEM]
"RegistrationDone"="1"
将之改为"0"，破窗再次出现。有意思的是，若去掉注册表中的注册码，但保留"RegistrationDone"="1"，会叫你填入注册码，但不会出现”网上注册“的窗口。


JPEG Optimizer 4.0

 标 题:用W32DASM破解JPEG Optimizer 4.0 (8千字)
发信人:DDXia
时 间:2000-2-21 12:52:50
详细信息:
用W32DASM破解JPEG Optimizer 4.0 （转载希望保持完整）
作者：丁丁虾 又名：DDXia

软件简介：
    该软件能对JPG图形文件压缩 50% 而不损失画质，自定压缩比，能即时显现压缩后的图片，让你比较差异，效果相当不错。
http://www.newhua.com.cn/down/jpopt3.exe
HI！各位早上好！由于自己的一点大意，折磨我一夜又未眠，本想放弃的，结果是
它是它给我光阴和灵魂------http://astalavista.box.sk---查不到这个软件的4.0
版，最高只有3.02，真的来劲了，一边吃着饼干，一边喝着娃哈哈，一边请我细细讲来：

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00429579(U)
|
:00429580 52 push edx
:00429581 E88E0B0000 call 0042A114
^^^^^^^^^^^^^---->为了这一CALL，耗了我 半瓶的Wahaha，5555，这是进入比较注册码的子程序

:00429586 59 pop ecx
:00429587 84C0 test al, al
:00429589 7504 jne 0042958F
^^^^^^^^^^^^----->不对，就过了，EASY了。
开始改为je 0042958F,只要输入任意8位数，就认为
注册码为正确，但每次都要进入都要输入一便，真是
繁它，继续加油哦！那为什么要八位呢？？？别急 :)
下面会说到的。嘻......
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042956E(C)
|
:0042958B 33C0 xor eax, eax
:0042958D EB05 jmp 00429594

接着我们再看一看它的注册码的子程序，不看不知道，看了就下了一跳（一个晚上
就载在它的手里，本以为初学者不用探讨它的注册码生成，唉。说来口水多），言
归正传，看好了，看好了。。。。。
* Referenced by a CALL at Addresses:
|:004047FF , :00429581
|
:0042A114 55 push ebp
:0042A115 8BEC mov ebp, esp
:0042A117 83C4F4 add esp, FFFFFFF4
:0042A11A 53 push ebx
:0042A11B 8B4508 mov eax, dword ptr [ebp+08]
:0042A11E 8D5DF4 lea ebx, dword ptr [ebp-0C]
:0042A121 8A10 mov dl, byte ptr [eax]
:0042A123 8813 mov byte ptr [ebx], dl
:0042A125 8A4801 mov cl, byte ptr [eax+01]
:0042A128 884B01 mov byte ptr [ebx+01], cl
:0042A12B 8A5002 mov dl, byte ptr [eax+02]
:0042A12E 885302 mov byte ptr [ebx+02], dl
:0042A131 8A4803 mov cl, byte ptr [eax+03]
:0042A134 884B03 mov byte ptr [ebx+03], cl
:0042A137 8A5004 mov dl, byte ptr [eax+04]
:0042A13A 885304 mov byte ptr [ebx+04], dl
:0042A13D 8A4805 mov cl, byte ptr [eax+05]
:0042A140 884B05 mov byte ptr [ebx+05], cl
:0042A143 8A5006 mov dl, byte ptr [eax+06]
:0042A146 885306 mov byte ptr [ebx+06], dl
:0042A149 8A4807 mov cl, byte ptr [eax+07]
:0042A14C 884B07 mov byte ptr [ebx+07], cl
:0042A14F 8A4008 mov al, byte ptr [eax+08]
:0042A152 884308 mov byte ptr [ebx+08], al
:0042A155 C6430900 mov [ebx+09], 00
:0042A159 0FBE03 movsx eax, byte ptr [ebx]
:0042A15C 50 push eax
:0042A15D E8228C0400 call 00472D84
:0042A162 59 pop ecx
:0042A163 83F84A cmp eax, 0000004A
:0042A166 7559 jne 0042A1C1
:0042A168 0FBE5301 movsx edx, byte ptr [ebx+01]
:0042A16C 52 push edx
:0042A16D E8128C0400 call 00472D84
:0042A172 59 pop ecx
:0042A173 83F853 cmp eax, 00000053
^^^^^^^^^^^^^^^^^---->
:0042A176 7549 jne 0042A1C1
:0042A178 0FBE4B02 movsx ecx, byte ptr [ebx+02]
:0042A17C 83F924 cmp ecx, 00000024
^^^^^^^^^^^^^^^^^---->
:0042A17F 7540 jne 0042A1C1
:0042A181 0FBE4303 movsx eax, byte ptr [ebx+03]
:0042A185 83F832 cmp eax, 00000032
^^^^^^^^^^^^^^^^^---->
:0042A188 7537 jne 0042A1C1
:0042A18A 0FBE5304 movsx edx, byte ptr [ebx+04]
:0042A18E 83FA38 cmp edx, 00000038
^^^^^^^^^^^^^^^^^---->
:0042A191 752E jne 0042A1C1
:0042A193 0FBE4B05 movsx ecx, byte ptr [ebx+05]
:0042A197 83F939 cmp ecx, 00000039
^^^^^^^^^^^^^^^^^---->
:0042A19A 7525 jne 0042A1C1
:0042A19C 0FBE4306 movsx eax, byte ptr [ebx+06]
:0042A1A0 83F832 cmp eax, 00000032
^^^^^^^^^^^^^^^^^---->
:0042A1A3 751C jne 0042A1C1
:0042A1A5 0FBE5307 movsx edx, byte ptr [ebx+07]
:0042A1A9 83FA31 cmp edx, 00000031
^^^^^^^^^^^^^^^^^---->
仰天长笑，得来全不费工夫，哈。哈。哈。。。比较了八次，然后看到
53，24，32，38，39，32，31，-----很熟，猜一猜，原来是JS$28921--注册码（可能每台机生成的不一样哦）
如果懒的化，可以把第一句jne 0042A1C1---->jmp 0042A1AE,OK！功德圆满。
:0042A1AC 7513 jne 0042A1C1
:0042A1AE C70554A448001443FC69 mov dword ptr [0048A454], 69FC4314
:0042A1B8 E8CFA7FDFF call 0040498C
:0042A1BD B001 mov al, 01
:0042A1BF EB1B jmp 0042A1DC

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0042A166(C), :0042A176(C), :0042A17F(C), :0042A188(C), :0042A191(C)
|:0042A19A(C), :0042A1A3(C), :0042A1AC(C)
|
:0042A1C1 53 push ebx
:0042A1C2 E8D1280000 call 0042CA98
:0042A1C7 59 pop ecx
:0042A1C8 84C0 test al, al
:0042A1CA 7404 je 0042A1D0
:0042A1CC B001 mov al, 01
:0042A1CE EB0C jmp 0042A1DC

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042A1CA(C)
|
:0042A1D0 C70554A44800EBBC0396 mov dword ptr [0048A454], 9603BCEB
:0042A1DA 33C0 xor eax, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0042A1BF(U), :0042A1CE(U)
|
:0042A1DC 5B pop ebx
:0042A1DD 8BE5 mov esp, ebp
:0042A1DF 5D pop ebp
:0042A1E0 C3 ret

对了，刚刚想金盆洗手，还有一个事没有交代呢？关于为什么要输入八位的事，（说
起来，就要记起台湾78787878大师和中国的12121212新生代，八字先生）瞎猫逮着个死老鼠！
让我找一下代码，我的纸上有N个地址，see...see.......找了21分钟...OK!
Let us see 一 see.
:00429533 FF461C inc [esi+1C]
:00429536 8B83C8010000 mov eax, dword ptr [ebx+000001C8]
:0042953C E83BC30100 call 0044587C
:00429541 66C746100800 mov [esi+10], 0008
:00429547 66C746103800 mov [esi+10], 0038
:0042954D 33C9 xor ecx, ecx
:0042954F 894DEC mov dword ptr [ebp-14], ecx
:00429552 8D55EC lea edx, dword ptr [ebp-14]
:00429555 FF461C inc [esi+1C]
:00429558 8B83C8010000 mov eax, dword ptr [ebx+000001C8]
:0042955E E819C30100 call 0044587C
:00429563 8D45EC lea eax, dword ptr [ebp-14]
:00429566 E863320200 call 0044C7CE
:0042956B 83F808 cmp eax, 00000008
^^^^^^^^^^^^^^^^^---->eax-->为输入码长度
:0042956E 751B jne 0042958B
^^^^^^^^^^^^--------->不等于8就BaiByby
:00429570 837DF800 cmp dword ptr [ebp-08], 00000000
:00429574 7405 je 0042957B
:00429576 8B55F8 mov edx, dword ptr [ebp-08]
:00429579 EB05 jmp 00429580
对了对了，还有一点
\HKEY_CURRENT_USER\Software\XA Tech\Jpeg0pt中code值保存注册码。
完成时间
2000.2.18.7:22
历时6个小时零51分钟（包括2个小时的睡眠）^_^


Lockdown2000_7.0.0.1

 标 题:Lockdown2000_7.0.0.1破解手记 (3千字)
发信人:十夜
时 间:2000-5-26 12:02:17
详细信息:
Lockdown2000_7.0.0.1破解手记
本人属懒派狂人，自下载Lockdown2000_7.0.0.1后一直等待破解的出现，但是始终不见其踪影。
本着你不烦我我不破你的原则平静的度过了十天，终于，讨厌的东西出现了，看来只有按原则
办事了，不想这东西加了壳，又臭又硬，还好在吴朝相的主页找到了脱壳后的汉化版本，省了
一道工序，可以开始工作了。

用W32Dasm反编译Lockdown2000.exe，找那个让我讨厌的东西(过期提示)，如下所示：
:004C313D E8321CFEFF call 004A4D74
:004C3142 84C0 test al, al
:004C3144 7546 jne 004C318C
:004C3146 E8B516FEFF call 004A4800
:004C314B 48 dec eax
:004C314C 7D27 jge 004C3175
:004C314E A14C9E4D00 mov eax, dword ptr [004D9E4C]
:004C3153 8B00 mov eax, dword ptr [eax]
:004C3155 E82AC5F8FF call 0044F684

* Possible StringData Ref from Code Obj ->"The trial period on this demo "
->"of LockDown 2000 has expired."
往上看看004C3144那一行能跳过过期提示，改为jmp 004C318C就不会过期了，但这也太那个……

注意一下call 004A4D74，看起来好像很有意思，到004A4D74去看看：
* Referenced by a CALL at Addresses:
|:004B5127 , :004B524E , :004B56FC , :004B5C0F , :004BD36D
|:004BE723 , :004C313D , :004C6AF4 , :004CBA42 , :004CCFAB
|:004CF4A3 , :004CF5FF
|
:004A4D74 55 push ebp
:004A4D75 8BEC mov ebp, esp
:004A4D77 B905000000 mov ecx, 00000005

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004A4D81(C)
|
:004A4D7C 6A00 push 00000000
:004A4D7E 6A00 push 00000000
:004A4D80 49 dec ecx
:004A4D81 75F9 jne 004A4D7C
:004A4D83 53 push ebx
:004A4D84 56 push esi
:004A4D85 33C0 xor eax, eax
:004A4D87 55 push ebp
:004A4D88 68E0514A00 push 004A51E0
:004A4D8D 64FF30 push dword ptr fs:[eax]
:004A4D90 648920 mov dword ptr fs:[eax], esp

* Possible StringData Ref from Code Obj ->"LD2KReg.ini"
|
:004A4D93 B9F8514A00 mov ecx, 004A51F8
:004A4D98 B201 mov dl, 01
:004A4D9A A1C8A14700 mov eax, dword ptr [0047A1C8]
:004A4D9F E8CC54FDFF call 0047A270
:004A4DA4 8BD8 mov ebx, eax
:004A4DA6 6A00 push 00000000
:004A4DA8 8D45E0 lea eax, dword ptr [ebp-20]
:004A4DAB 50 push eax

* Possible StringData Ref from Code Obj ->"Register"
|
:004A4DAC B90C524A00 mov ecx, 004A520C

* Possible StringData Ref from Code Obj ->"Register"
|
:004A4DB1 BA0C524A00 mov edx, 004A520C
:004A4DB6 8BC3 mov eax, ebx
:004A4DB8 8B30 mov esi, dword ptr [eax]
:004A4DBA FF16 call dword ptr [esi]
:004A4DBC 8D45DC lea eax, dword ptr [ebp-24]
:004A4DBF E8B4F9FFFF call 004A4778
:004A4DC4 8B55DC mov edx, dword ptr [ebp-24]
:004A4DC7 8B45E0 mov eax, dword ptr [ebp-20]
:004A4DCA E8BDF2F5FF call 0040408C
:004A4DCF 7537 jne 004A4E08
…………………………………………………………
好像很受欢迎的样子，而且它还提到了LD2KReg.ini，再看看后面的代码，应该是判断注册的地方，程序很简单，将004A4DCF的jne 004A4E08改为je 004A4E08即可成为注册版。
LD2KReg.ini 文件内容变为：
[Register]
Register=C5VPQ1;=SMQ
我想用没改过的汉化版做一下测试，可它显示已经是注册版了，不知这个文件在别的机器上管不管用？我用的是WIN2000，该文件在C:\WINNT下，WIN98我就不清楚了。

另：我最爱用的EXPLOR2000到了1.52.2版本，我将其脱壳后在WIN2000中不能运行，WHY?

Tennight.C 2000/5/26


Magic Note Desktop utility V2.6b

 标 题:初学者作品（6） (1千字)
发信人:liutong
时 间:2000-5-4 13:05:33
详细信息:
Magic Note Desktop utility V2.6b的破解

该软件是在计算机中加便条的小工具.
破解使用工具:SoftIce 3.23
软件注册需要输入名字和注册号
任意输入后,CTRL+D进入SICE设置中断点:bpx hmemcpy
回到Magic Note按OK,被中断后按F12键12次(第13次出现错误信息)
然后若干次按F10后,找到下面的语句:
call ...
test ax,ax
jnz ....
进入CALL查看,软件是比较了两个码后,根据结果对ax置位或复位
其中一个代码是由注册号生成的,而另一个代码猜测是由名字
生成的,于是重复上面的操作,找到生成这个代码的CALL,
发现了该代码的生成过程(见下面).
到此再找到另一个代码生成的过程,这个软件就彻底被破解了.
于是追踪由注册号产生代码的过程,可惜本人水平有限,未查出来(后来发现其实很简单)
但是不能气馁,继续想办法:
因为我已经知道比较代码的位置,所以我在那儿下了断点.
然后任意输入注册码,然后比较生成的代码,希望找到一些线索.
我在注册码中只输入一个数字,然后按OK,被中断下来后发现,代码是输入数字的HEX格式
Haha...好象被我找到了,赶紧把刚才记录的数据找出来,比较,果然.
在我努力的结果下,该软件被破解了.
由名字生成代码的过程如下:
第一个字母的ASCII码左移四位,与第二个字母的ASCII码相加,结果左移四位,再与第三个
字母的ASCII码相加,以此类推.最后的结果再与0FF0FFF0相与,再转为十进制即是注册号.
举例说明:
输入名字:Killer (ASCII码为:4B 69 6C 6C 65 72)
4B0
69
5190
6C
51FC0
6C
5202C0
65
5203250
72
52032C2

52032C2 & 0FF0FFF0 =52032C0

(52032C0)HEX=(85996224)Decimal
注册号: 85996224

知道了整个过程,编写注册机就很简单了.
本人刚刚学习破解,此软件是作品第六号
网上太多的注册码,经验和教程太少.
liutongwu@yahoo.com


netspy3.12

 标 题:破解spy312.exe实战! (953字)
发信人:十三少
时 间:2000-6-2 17:00:19
详细信息:
======破解netspy3.12全攻略====================

程序下载：http://ajj.533.net/ckfile/spynet312.exe

这里只是简便过程，如有时间会把过程补出来的!：)
****第一步：
**软件脱壳
1、用trw2000载入peepnet.exe
2、程序被拦，下
:bpx 004126da
:g
3、程序又被拦于：
xxxx:004126DA PUSH EBP
XXXX:004126DB MOV EBP,ESP
XXXX:004126DD PUSH BYTE -01
.............(略)
下
:pedump c:\peepnet.exe
4、呵呵，这样，你的C盘目录下就有一个脱好的
peepnet.exe了!
****第二步：
**修改软件
找84bd74168bce
改84bd90908bce
存盘退出!
5、这样软件就算注册了!运行软件，哈哈，
"registered to :DEMO VERSION"
如果你觉得这个软件应该是注册给自己的，
于是你可在注册表：
HKEY_USERS/.DEFAULT/SOFTWARE/MLsoft/Peepnet/USER/
修改nume的值，如改为yubing
重新运行软件，是不是看上去爽多了!

后记：我试着将时间调后了几个月，程序也能照常运行，看来是
没什么问题了。ajj老兄，这个软件也算是搞定了吧:)

破解者： 十三少
China Cracking Group
2000.6.2


NMI's Java Code Viewer 4.8.2

 标 题:who can crack this soft ? (99字)
发信人:IceBird
时 间:2000-5-28 12:38:18
阅读次数:78
详细信息:

if you can crack this soft,would you link to tell me? :)
http://www.newhua.com.cn/down/njcv482.zip

标 题:已找到NMI's Java Code Viewer 4.8.2的注册码，内详 (3千字)
发信人:郭大志
时 间:2000-6-7 19:51:37
详细信息:

首先加载snjrt11.dll的符号表，这个DLL从名字上看似为Sun的Java Run Time支撑库。
用bpx MultiByteToWideChar设断点，因为Java程序和VB程序一样，也是用WideChar形式的字符串。
之后再用BPR断点监视WideChar形式的注册码，发现它把你输入的注册码转换成一个整数，
再用BPR或BPM断点监视这个整数，就到了生成注册码的程序段。

一个可用的注册码为：
Name: Me
Country: China
Code: 1605226644

下面的程序段生成并比较注册码。可见，写一个注册机也并非不可能。

0167:0040FD2C SUB ESP,18
0167:0040FD2F PUSH EBX
0167:0040FD30 PUSH EBP
0167:0040FD31 PUSH ESI
0167:0040FD32 PUSH EDI
0167:0040FD33 MOV ECX,[ESP+3C]
0167:0040FD37 MOV EBP,EAX
0167:0040FD39 MOV [ESP+10],EAX
0167:0040FD3D MOV ESI,[ESP+34]
0167:0040FD41 MOV EDI,[ESP+38]
0167:0040FD45 MOV EBX,[ECX]
0167:0040FD47 CMP DWORD PTR [ESP+2C],00
0167:0040FD4C JNZ 0040FD76
0167:0040FD4E MOV EDX,[SNJRT11!$Classjava_lang_String]
0167:0040FD54 MOV ECX,[EBX+04]
0167:0040FD57 PUSH EDX
0167:0040FD58 PUSH ECX
0167:0040FD59 MOV EAX,[00427F00]
0167:0040FD5E CMP EAX,00000000
0167:0040FD63 MOV EDX,[EBX+04]
0167:0040FD66 MOV ECX,[EDX+04]
0167:0040FD69 CALL [ECX+44]
0167:0040FD6C PUSH EAX
0167:0040FD6D CALL SNJRT11!__j_checkcast@8
0167:0040FD72 MOV [ESP+2C],EAX
0167:0040FD76 TEST EBP,EBP
0167:0040FD78 JNZ 0040FDA0
0167:0040FD7A MOV EDX,[SNJRT11!$Classjava_lang_String]
0167:0040FD80 MOV ECX,[EBX+04]
0167:0040FD83 PUSH EDX
0167:0040FD84 PUSH ECX
0167:0040FD85 MOV EAX,[00427F44]
0167:0040FD8A CMP EAX,00000000
0167:0040FD8F MOV EDX,[EBX+04]
0167:0040FD92 MOV ECX,[EDX+04]
0167:0040FD95 CALL [ECX+44]
0167:0040FD98 PUSH EAX
0167:0040FD99 CALL SNJRT11!__j_checkcast@8
0167:0040FD9E MOV EBP,EAX
0167:0040FDA0 MOV EAX,[ESP+30]
0167:0040FDA4 TEST EAX,EAX
0167:0040FDA6 JNZ 0040FDB2
0167:0040FDA8 MOV DWORD PTR [ESP+14],00000000
0167:0040FDB0 JMP 0040FDC1
0167:0040FDB2 MOV EAX,[ESP+30]
0167:0040FDB6 MOV EDX,[EAX]
0167:0040FDB8 CALL SNJRT11!$java_lang_Integer_intValue__
0167:0040FDBD MOV [ESP+14],EAX
0167:0040FDC1 MOV [ESP+10],EBP
0167:0040FDC5 MOV ECX,[SNJRT11!$Classjava_lang_StringBuffer]
0167:0040FDCB PUSH ECX
0167:0040FDCC CALL SNJRT11!__j_new@4
0167:0040FDD1 CALL SNJRT11!$java_lang_StringBuffer__4init_5__
0167:0040FDD6 MOV [ESP+18],EAX
0167:0040FDDA PUSH EAX
0167:0040FDDB MOV EAX,EDI
0167:0040FDDD CALL SNJRT11!$java_lang_StringBuffer_append__Ljava_lang_Stri
0167:0040FDE2 MOV EDX,[ESP+18]
0167:0040FDE6 MOV EAX,ESI
0167:0040FDE8 PUSH EDX
0167:0040FDE9 CALL SNJRT11!$java_lang_StringBuffer_append__Ljava_lang_Stri
0167:0040FDEE CALL SNJRT11!$java_lang_StringBuffer_toString__
0167:0040FDF3 MOV [ESP+1C],EAX
0167:0040FDF7 MOV EAX,EDI
0167:0040FDF9 MOV ECX,[EDI]
0167:0040FDFB CALL SNJRT11!$java_lang_String_hashCode__
0167:0040FE00 MOV [ESP+20],EAX
0167:0040FE04 MOV EAX,ESI
0167:0040FE06 MOV EDX,[ESI]
0167:0040FE08 CALL SNJRT11!$java_lang_String_hashCode__
0167:0040FE0D MOV [ESP+24],EAX
0167:0040FE11 MOV EAX,[ESP+1C]
0167:0040FE15 MOV ECX,[EAX]
0167:0040FE17 CALL SNJRT11!$java_lang_String_hashCode__
0167:0040FE1C MOV EBP,[ESP+20]
0167:0040FE20 IMUL EBP,[ESP+24]
0167:0040FE25 MOV EDX,[ESP+1C]
0167:0040FE29 ADD EBP,EAX
0167:0040FE2B MOV ECX,[EDX]
0167:0040FE2D SUB EBP,[ECX+08]
0167:0040FE30 JNS 0040FE34
0167:0040FE32 NEG EBP
0167:0040FE34 CMP [ESP+14],EBP //这里比较注册码！！！！
0167:0040FE38 JNZ 0040FF1F

标 题:注册机 (1千字)
发信人:郭大志
时 间:2000-6-8 12:31:13
详细信息:

 //Note: only English characters allowed.
//        so you can't use your Chinese name :-(

#include <stdio.h>
#include <string.h>

long java_lang_String_hashCode(char *str);

void main(void)
{

char Name[128];
char Country[128];
long NameCode, CountryCode, AllCode, Code;

printf("KeyGen for NMI's Java Code Viewer 4.8.2.\n");

printf("Input your name: ");
gets(Name);
printf("Input your country: ");
gets(Country);

NameCode    = java_lang_String_hashCode(Name);
CountryCode = java_lang_String_hashCode(Country);
AllCode    = java_lang_String_hashCode(strcat(Name,
  Country));

Code = NameCode * CountryCode + AllCode;
Code -= strlen(Name);
if (Code < 0)
{
Code = -Code;
}

printf("You code: %lu\n", Code);
}

long java_lang_String_hashCode(char *str)
{
int  k, len, edi,step;
long result;

if (str == NULL)
{
return 0;
}

result = 0;

len = strlen(str);

if (len < 0x10)
{
for (k = 0; k < len; k++)
{
result *= 37;
result += (long)str[k] & 0xFF;
}
}
else
{
k = 0;
step = (len >> 3);
edi = len;
do
{
edi -= step;
result *= 0x27;
result += (long)str[k];
k += step;
} while (edi > 0);
}

return result;
}


NoteWorthy Composer 1.55b

 标 题:初学者(11) (2千字)
发信人:liutongwu
时 间:2000-5-18 23:02:38
详细信息:
软件名称:NoteWorthy Composer 1.55b
软件来源:软件世界2000.2
软件介绍:音乐创造者的最爱,可以直接用五线谱创作音乐

设断点:bpx hmemcpy
软件被中断后,按F12 22次(第23次出错误画面)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041E469(U)
|
:0041D68C 55 push ebp
:0041D68D 8BEC mov ebp, esp
:0041D68F 53 push ebx
:0041D690 8B5D08 mov ebx, dword ptr [ebp+08]
:0041D693 8D4324 lea eax, dword ptr [ebx+24]
:0041D696 50 push eax
:0041D697 53 push ebx
:0041D698 E818FFFFFF call 0041D5B5
:0041D69D 83C408 add esp, 00000008 <-----程序返回到此
:0041D6A0 8D4324 lea eax, dword ptr [ebx+24]
:0041D6A3 50 push eax
:0041D6A4 E8B9F00300 call 0045C762
:0041D6A9 59 pop ecx
:0041D6AA 85C0 test eax, eax
:0041D6AC 7542 jne 0041D6F0 <-----正常注册由此跳转

追入0045C762的CALL找到下面的程序

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045C795(C)
|
:0045C79B C645F000 mov [ebp-10], 00
:0045C79F 8D45F0 lea eax, dword ptr [ebp-10]
:0045C7A2 50 push eax
:0045C7A3 FF7348 push [ebx+48]
:0045C7A6 8D4308 lea eax, dword ptr [ebx+08]
:0045C7A9 50 push eax
:0045C7AA FF7304 push [ebx+04]
:0045C7AD FF33 push dword ptr [ebx]
:0045C7AF E8D5000000 call 0045C889
:0045C7B4 83C414 add esp, 00000014
:0045C7B7 83C34C add ebx, 0000004C
:0045C7BA 53 push ebx
:0045C7BB 8D45F0 lea eax, dword ptr [ebp-10]
:0045C7BE 50 push eax <------在此D EAX可看到注册码
:0045C7BF E8404EFBFF call 00411604
:0045C7C4 83C408 add esp, 00000008
:0045C7C7 85C0 test eax, eax
:0045C7C9 0F94C0 sete al
:0045C7CC 83E001 and eax, 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0045C77C(U), :0045C786(U), :0045C799(U)
|
:0045C7CF 5B pop ebx
:0045C7D0 8BE5 mov esp, ebp
:0045C7D2 5D pop ebp
:0045C7D3 C3 ret

几组用户名和注册码:
用户名:Killer
注册码:000-640-492482
用户名:Cracker
注册码:000-313-555322
用户名:Player
注册码:000-685-858909
用户名:Begginner
注册码:000-485-395681

由上面的注册码可看出第一组000是固定的,第二组我未找到计算的地方
第三组我找到了计算的地方但该计算很复杂,此处不再详述


polyview

 标 题:破解实战！polyview (3千字)
发信人:十三少
时 间:2000-6-27 10:17:16
详细信息:
***前言:其实有了ACDSee之后,我就很少用其它的看图工具,也是为了练手,才拉了这个
小东西,嘻嘻...,希望大家能够欢喜!

***软件下载:
http://www.newhua.com.cn/down/polyv333.exe
***软件简介:
一个各种常见文件格式的图片查看器。它可查看以下文件格式：BMP, GIF, JPEG, TIFF, PCD, TGA, and TIF 和其他更多的格式。同样支持书签功能。
好了,下面开始吧!
１、先打开trw2000，再打开polyview.exe，选择“lisence”，填入注册
信息：lisencee :yubing
lisence :78787878
２、下中断
:bpx hmemcpy
:g
回到程序后，按“ＯＫ”，程序被拦。下
:pmodule （回到程序领空）
按１２数次后，到达如下代码：

0167:00457A13 MOV [ESI+02E0],EAX
0167:00457A19 CALL 004418D0 <--注册比较部分,f8追入
0167:00457A1E ADD ESP,BYTE +08
0167:00457A21 TEST EAX,EAX <--为0则,game over!
0167:00457A23 JZ NEAR 00457AB8
３、在call 00441810　处Ｆ８进入后，到如下代码：
0167:004418FB PUSH EDI
0167:004418FC CALL 00441BA0
0167:00441901 MOV EBX,[ESP+0150]
0167:00441908 ADD ESP,BYTE +08
0167:0044190B CMP EAX,EBX
0167:0044190D JZ NEAR 004419C0
0167:00441913 PUSH DWORD 00552E50
0167:00441918 PUSH EDI
0167:00441919 CALL 00441BA0
0167:0044191E ADD ESP,BYTE +08
0167:00441921 CMP EAX,EBX
0167:00441923 JZ NEAR 004419C0
0167:00441929 LEA EAX,[ESP+18]
0167:0044192D PUSH EAX
0167:0044192E CALL 004DD5F5
0167:00441933 MOV ECX,[EAX]
0167:00441935 XOR ESI,ESI
0167:00441937 MOV [ESP+24],ECX
0167:0044193B PUSH ECX
0167:0044193C LEA EDX,[ESP+2C]
0167:00441940 MOV EAX,ESP
0167:00441942 MOV [ESP+1C],ESP
0167:00441946 PUSH EDX
0167:00441947 LEA ECX,[ESP+2C]
0167:0044194B MOV [EAX],ESI
0167:0044194D CALL 00441B80
0167:00441952 MOV EAX,[EAX]
0167:00441954 LEA ECX,[ESP+10]
0167:00441958 PUSH DWORD 00552E48
0167:0044195D PUSH ECX
0167:0044195E LEA ECX,[ESP+34]
0167:00441962 MOV [ESP+34],EAX
0167:00441966 CALL 004DD637
0167:0044196B MOV EDX,[ESP+10]
0167:0044196F MOV DWORD [ESP+013C],02
0167:0044197A PUSH EDX
0167:0044197B PUSH EDI
0167:0044197C CALL 00441BA0
0167:00441981 ADD ESP,BYTE +08
0167:00441984 CMP EAX,EBX <--//比较eax,ebx
0167:00441986 MOV DWORD [ESP+013C],FFFFFFFF　? ebx 78787878的16进制
0167:00441991 LEA ECX,[ESP+10]　　　　 ? eax 正确的注册码
0167:00441995 JZ 004419B1
0167:00441997 CALL 004E53B2
0167:0044199C ADD ESI,00015180
0167:004419A2 CMP ESI,0028DE80
0167:004419A8 JL 0044193B <--//循环比较
0167:004419AA XOR EAX,EAX <--//eax清０，注册失败标志
0167:004419AC JMP 00441B61
0167:004419B1 CALL 004E53B2
0167:004419B6 MOV EAX,01　　<--//eax赋１，注册成功标志
0167:004419BB JMP 00441B61
0167:004419C0 MOV EBP,01

***注：这个注册码不唯一，可以有多个，一个名字可能最多３０个注册码。
如482156339 ,1926300107 ,33507334 ect

        破解者：十三少
       China Cracking Group
2000.06.27


PowerStrip 2.67

 标 题:ok, cracked! (3千字)
发信人:IceBird
时 间:2000-5-24 16:46:42
详细信息:
破 PowerStrip 2.67

本文作者：IceBird
http://nemc.yeah.net/
icebird_crack@21cn.com

所用工具：Soft-ice405 Procdump1.6.2 Uedit32

PowerStrip 2.67 到这里下载:
http://202.102.249.231/ftproot/6/pstrip267.exe

前言：
这个软件用ASPack加壳，采用keyfile保护，因此我们先脱壳再破解 :)

1. 脱壳

因为软件用ASPack加壳，我也不知道用的是ASPack的什么版本，所以请先跟我一起编辑
Procdump 的 Script.ini 文件。
在 Script.ini 文件中加上这些：

P??=Aspack （ ?? 是行号，注意是16进制的 ）

[Aspack]
L1=OBJR
L2=LOOK EB,?
L3=JZ 5
L4=QUIT
L5=BP
L6=WALK
L7=OBJR
L8=LOOK 61,75
L9=BP
LA=STEP
OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000

这样Procdump也就可以脱去到目前为止所有用ASPack加壳的软件了 :)

用Procdump脱去pstrip.exe（在windows目录下）的壳，然后将脱壳后的文件复制到Windows
目录下覆盖原文件。

2. 破解

软件好象用了keyfile的保护，可惜小弟这只菜鸟算不出它的注册码 :(
如果能算出注册码，当然也不必脱壳了。
ok,go...

启动 pstrip ，出现注册提示画面，ctrl-d 唤出 soft-ice ，下 bpx destroywindow ，
按 F5 返回 window ，点击一下 OK ，马上被拦下，这时按一下 F12 ，回到pstrip的领空，
下 s 0 l 90000000 'demo' ，搜索到 xxx:yyyyyyyy 的地址，地址应该是每个人的不同，
下 bpm yyyyyyyy ，按 F5 返回 window ，退出 pstrip ，再一次启动 pstrip ，拦下后
我们就开始按 F12 ，按多少次？我也不记得了，大概17次吧，反正也就是来到了这里：

:004CB57D E84AF40000 CALL 004DA9CC
:004CB582 8B45FC MOV EAX,[EBP-04]
:004CB585 80B84805000000 CMP BYTE PTR [EAX+00000548],00
:004CB58C 0F85A8000000 JNZ 004CB63A
:004CB592 8B45FC MOV EAX,[EBP-04]
:004CB595 80B84805000000 CMP BYTE PTR [EAX+00000548],00
:004CB59C 7433 JZ 004CB5D1
:004CB59E 8D954CFEFFFF LEA EDX,[EBP-01B4]
:004CB5A4 B801000000 MOV EAX,00000001
:004CB5A9 E80673F3FF CALL 004028B4
:004CB5AE 8B854CFEFFFF MOV EAX,[EBP-01B4]
:004CB5B4 8D9550FEFFFF LEA EDX,[EBP-01B0]
:004CB5BA E899B3F3FF CALL 00406958
:004CB5BF 8B8550FEFFFF MOV EAX,[EBP-01B0]
:004CB5C5 BA08C14C00 MOV EDX,004CC108
:004CB5CA E8E982F3FF CALL 004038B8
:004CB5CF 7569 JNZ 004CB63A
:004CB5D1 8B0D7C954F00 MOV ECX,[004F957C]
:004CB5D7 B201 MOV DL,01
:004CB5D9 B8D8644B00 MOV EAX,004B64D8
:004CB5DE E8FD7AF4FF CALL 004130E0
:004CB5E3 A350DB4F00 MOV [004FDB50],EAX * we stop here *
:004CB5E8 33C0 XOR EAX,EAX
:004CB5EA 55 PUSH EBP
:004CB5EB 6833B64C00 PUSH 004CB633
:004CB5F0 64FF30 PUSH DWORD PTR FS:[EAX]
:004CB5F3 648920 MOV FS:[EAX],ESP
:004CB5F6 A150DB4F00 MOV EAX,[004FDB50]
:004CB5FB E898A7F4FF CALL 00415D98 * 这里出现注册提示画面 *
:004CB600 83F802 CMP EAX,02
:004CB603 750F JNZ 004CB614

我们停在 004CB5E3 处，当光标经过 004CB5FB 这里也就出现注册提示画面，于是向上看
哪里可以跳过它。
我找到了 004CB58C 和 004CB5CF 都可以跳过，第1个比较好一些，所以在 004CB585 处
设断点，再来一次，在 004CB585 处拦下，这时 [EAX+00000548] 的值为 0 ，如果
[EAX+00000548] 的值为 1 ，也就行了，因此我们把

:004CB585 CMP BYTE PTR [EAX+00000548],00
改成：
:004CB585 INC BYTE PTR [EAX+00000548]

因为少了一个 byte ，所以加一个 nop ，别忘了下 code on 指令

3. 用 Uedit32 打开已脱壳的 pstrip.exe 文件，

查找：80B848050000000F85A8000000
改成：FE804805000090------------

运行 pstrip ，没有的干挠画面，看一下 ‘关于 PowerStrip’，
在我的机上显示着：License #84653
破解成功！

the end
标 题:精华2中的POWERZIP破解不完全,右键功能不能使用.如果文件属性不是只读,下一次启动又会恢复. (空)
发信人:zlion
时 间:2001-2-12 18:49:20
详细信息:


Readbook 1.31

 标 题:Readbook 1.31破解心得 (3千字)
发信人:冰毒
时 间:2000-3-1 14:36:48
详细信息:
这个程序的破解很费了一些时间.

1. 采用常规的方法BPX Getwindowtexta,SICE拦住后F12回到程序,查找输入的注册码,BPM(或BPR)找到的内存地址,发现程序将输入的注册码转换成16进制形式(比如12344321变成BC5C01). 用BPM设断,但程序频繁地被拦在无关的地方,很快迷失了方向
2. 拦截程序弹出的注册码无效的提示,返回程序,经过很久,找不出关键的跳转
3. 用Regmon和Filemon观察得知,程序不在注册表中做手脚,而是读readbook.ini文件,试用getprivateprofilestringa设断,拦住许多次,仍然找不到关键之处

单用动态跟踪看来比较困难,于是转向静态分析. 用W32dsm反汇编程序,寻找可疑的字符串,找到几个:
"NowDay"
"File"
"User"
"Register"
"RegisterEncryptMode"
猜测一下,"Nowday"应该是记载运行时的日期,因为未注册的版本在每天第一次使用时会'打扰'你一下. 注册成功时,在readbook.ini的[File]项目下会加上User和Register. "RegisterEncrytMode"应该是程序将注册码加密之后写入ini中.于是想到,既然注册码是以加密形式写入,那么程序运行时也必须再将其解码还原以做比较. 好,有办法了.
1. 手动在readbook.ini中[File]项下加上User=ABCD,Register=12344321
2. 在W32dsm中找"RegisterEncryptMode",共有两处,你会注意到两处的代码几乎是一样的.分别记下首行地址0041F6B7,00409A9F
3. BPX 0041F6B7,00409A9F (在TRW2000中你可直接如此设断,在SICE中可用Symbol loader载入程序,再设断)
4. 程序在00409A9F被拦住,

* Possible StringData Ref from Data Obj ->"RegisterEncryptMode"
|
:00409A9F 6860E84500 push 0045E860
:00409AA4 57 push edi
:00409AA5 8945FC mov dword ptr [ebp-04], eax
:00409AA8 C745F412320000 mov [ebp-0C], 00003212 <-很
:00409AAF C745E434120000 mov [ebp-1C], 00001234 <-有
:00409AB6 C745E888880000 mov [ebp-18], 00008888 <-意
:00409ABD C745F023230000 mov [ebp-10], 00002323 <-思
:00409AC4 E8A6AE0000 call 0041496F <-做什么?
:00409AC9 83C410 add esp, 00000010
:00409ACC 85C0 test eax, eax
:00409ACE 7524 jne 00409AF4 <-试着改成je,不成功

5. 程序会提示你注册码错误,并删掉我们手动加上的User,Register.
没关系,重新再来一次

6. F10一直往下走,到了下一个条件跳转处

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409B34(C)
|
:00409B19 3975FC cmp dword ptr [ebp-04], esi
:00409B1C 741D je 00409B3B <-试改成jne

再查看Help菜单,Register选项没有了,About显示用户姓名ABCD. 终于给我找到要害处了. :)
好,再来一次,当光标停在00409B1C行时, ? esi 你就得到真正的注册码了. 实际上对于一个用户名而言,不只一个注册码,不信往下看.

:00409B1E 8B55EC mov edx, dword ptr [ebp-14]
:00409B21 8BC8 mov ecx, eax
:00409B23 83E17F and ecx, 0000007F
:00409B26 03348A add esi, dword ptr [edx+4*ecx]
:00409B29 40 inc eax
:00409B2A 3DFF0F0000 cmp eax, 00000FFF
:00409B2F A328034600 mov dword ptr [00460328], eax
:00409B34 72E3 jb 00409B19

程序把你输入的注册码和4095(FFFh)个有效码相比,只要有一个相同就行.这样重名的人可以从作者处得到不同的注册码.

:00409B36 3975FC cmp dword ptr [ebp-04], esi <-最后一次机会
:00409B39 7547 jne 00409B82 <-跳走就没戏了

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409B1C(C)
|
:00409B3B 8B75F8 mov esi, dword ptr [ebp-08]
:00409B3E C70500314B0001000000 mov dword ptr [004B3100], 00000001
:00409B48 FF761C push [esi+1C]

7. 用得到的注册码,注册程序即可.

特别声明: 这是个很好的程序,保护也做得不错.软件作者定的价格也相当低,不注册功能也没限制,只在每天第一次使用时给你个提醒.因此,如果大家使用这个软件的话,请尽量购买,支持和尊重作者的劳动.本人写这篇东西,只是做技术交流,所以我在文中没有给出任何有效的注册码.我本人也不用这个软件(因为在我的英文WIN95加挂Richwin的系统中,这个软件不能正常显示文本).


Recover 4 all version 0.3

 标 题:Recover 4 all version 0.3 破解（Winter Lee原著，sunwk补充） (2千字)
发信人:sunwk（小楼）
时 间:2000-4-13 16:13:23
详细信息:
Recover 4 all version 0.3 破解（Winter Lee原著，sunwk补充）

近日因误删了一个文件，想要找回来，就用了 Recover 4 all。但未注册版只能恢复10kb以下的文件。我试了半天也找不到注册码。幸好有一篇破解文章，就依葫芦画瓢，最终破解了，但也发现一个原作者未发现的问题，特此提出。
以下是Winter Lee写的破解文章。

Recover 4 all version 0.3 破解
------------------------------
1. 运行后提示注册画面，点击“Yes I have read the license agreement and agree
to be bound by it”进入后选 Register 菜单下的 Enter Registration Key。

2. 输入注册姓名和注册码（当然注册码是乱填的）。

Registration Name: Winter Lee
Registration Key: 24325128

3. 按Ctrl-D叫出SoftICE下指令bpx hmemcpy后按F5返回，按OK。

4. SoftICE拦截后，反复按F12返回Recover 4 all程序区（下边有绿色
REC4ALL!.txt+xxxxxxxx字样）。程序应如下：

xxxx:00422113 MOV ECX, [ESP+08]

5. 接下去我想请大家自己试试，因为比较容易，且软件又很小(189k)，有兴趣的朋友
可去http://ourworld.compuserve.com/homepages/kaus下下载。这个软件可恢复
已经从回收站清除了的文件。

提示：当运行了 xxxx:0040F056 CALL 0040AAC0 后 EAX 地址存放的就是正确的
注册码，在这儿是：VLHL3MFSS68

6. 重新运行 Recover 4 all，填入注册姓名和注册码后别忘了在
Save Registration Information on this computer permanently 前边的核选框
内打个对号，否则你的注册码不被保存，下次运行还提示你注册信息。

============================================================
Cracked by Winter Lee @ 11/24/98
============================================================
Email: winterl@126.com WWW: http://www.netease.com/~winterl
============================================================

我在使用时 Registration Name 中输入了 7 个字母的名字，却得不到正确的注册码，甚至见不到它的踪影。（注：我的机器上是在运行了 xxxx:0040F056 CALL 0040AAC0 后看EBP，这里才放着正确的注册码。）
后来发现：

:0040F056 CALL 0040AAC0 <--F8进入
......
:0040AB1B 83FD08 cmp ebp, 00000008 <--ebp系输入用户名的 字母位数
:0040AB1E 896C2418 mov dword ptr [esp+18], ebp
:0040AB22 0F8CBB020000 jl 0040ADE3 <--8位以下跳走。

这下知道问题所在了，键入8位或以上的用户名，按照Winter Lee的方法，序列号找到了。


ScreenTaker2.21

 标 题:用W32DASM破解图形捕捉ScreenTaker 最新版本：2.21 (7千字)
发信人:DDXia
时 间:2000-2-21 12:54:37
阅读次数:483
详细信息:
用W32DASM破解图形捕捉ScreenTaker 最新版本：2.21（转载希望保持完整）
作者：丁丁虾 又名：DDXia

文件大小：572KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    屏幕拷贝工具，可以拷贝整个窗口、桌面或者是指定区域，支持 BMP、JPEG、{CX、TGA、TIFF 格式。
http://www.newhua.com.cn/down/stake221.zip
破解完这个软件，我真想大哭一场。。。。555555。。。别，别这样，革命尚未成
功。今天终于明白：长夜漫漫，我独行；踏破铁鞋，无觅处；唉，得来全不费工夫。
老一套用W32DASM载入STaker.EXE，查找注册失败的窗口中的E文，肯定没有啦！为什么？胡乱的追踪了十几分钟，没有什么结果！本想放弃！无意中看见在它的目录中还有一个EXE文件---Config.exe.加载看一看！再查找注册失败的窗口中的E文，半秒就
找到了"Invalid registration key."---->我第一次有哭的感觉。
再往上查看有没有类似je cmp 或jne

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043FA51(C)
|
:0043FAB8 8B83A0020000 mov eax, dword ptr [ebx+000002A0]
:0043FABE E8C5B4FDFF call 0041AF88
:0043FAC3 8B55FC mov edx, dword ptr [ebp-04]
:0043FAC6 8B06 mov eax, dword ptr [esi]
:0043FAC8 83C00C add eax, 0000000C
:0043FACB E8603CFCFF call 00403730
:0043FAD0 8D55FC lea edx, dword ptr [ebp-04]
:0043FAD3 8B83B0020000 mov eax, dword ptr [ebx+000002B0]
:0043FAD9 E8AAB4FDFF call 0041AF88
:0043FADE 8B55FC mov edx, dword ptr [ebp-04]
:0043FAE1 8B06 mov eax, dword ptr [esi]
:0043FAE3 83C010 add eax, 00000010
:0043FAE6 E8453CFCFF call 00403730
:0043FAEB 8D55FC lea edx, dword ptr [ebp-04]
:0043FAEE 8B83B4020000 mov eax, dword ptr [ebx+000002B4]
:0043FAF4 E88FB4FDFF call 0041AF88
:0043FAF9 8B55FC mov edx, dword ptr [ebp-04]
:0043FAFC 8B06 mov eax, dword ptr [esi]
:0043FAFE 83C014 add eax, 00000014
:0043FB01 E82A3CFCFF call 00403730
:0043FB06 8D55FC lea edx, dword ptr [ebp-04]
:0043FB09 8B83B8020000 mov eax, dword ptr [ebx+000002B8]
:0043FB0F E874B4FDFF call 0041AF88
:0043FB14 8B55FC mov edx, dword ptr [ebp-04]
:0043FB17 8B06 mov eax, dword ptr [esi]
:0043FB19 83C018 add eax, 00000018
:0043FB1C E80F3CFCFF call 00403730
:0043FB21 8D55FC lea edx, dword ptr [ebp-04]
:0043FB24 8B83C0020000 mov eax, dword ptr [ebx+000002C0]
:0043FB2A E859B4FDFF call 0041AF88
:0043FB2F FF75FC push [ebp-04]
:0043FB32 6834FC4300 push 0043FC34
:0043FB37 8D55F8 lea edx, dword ptr [ebp-08]
:0043FB3A 8B83C8020000 mov eax, dword ptr [ebx+000002C8]
:0043FB40 E843B4FDFF call 0041AF88
:0043FB45 FF75F8 push [ebp-08]
:0043FB48 8B06 mov eax, dword ptr [esi]
:0043FB4A 83C01C add eax, 0000001C
:0043FB4D BA03000000 mov edx, 00000003
:0043FB52 E8C13EFCFF call 00403A18
:0043FB57 8B06 mov eax, dword ptr [esi]
:0043FB59 E80ED8FFFF call 0043D36C
^^^^^^^^^^^^^---> 比较注册码
:0043FB5E 84C0 test al, al
:0043FB60 0F8489000000 je 0043FBEF
^^^^^^^^^^---->就是它了，改为jne就行了

下面一堆东东是把你填写的注册信息写入注册表中，
位置在HKCU\Software\GBSoft\STaker\下，可以看一看，

* Possible StringData Ref from Code Obj ->"Software\GBSoft\STaker"
|
:0043FB66 BA40FC4300 mov edx, 0043FC40
:0043FB6B 8B06 mov eax, dword ptr [esi]
:0043FB6D E80ED6FFFF call 0043D180
:0043FB72 8B06 mov eax, dword ptr [esi]
:0043FB74 8B5004 mov edx, dword ptr [eax+04]
:0043FB77 8B83E4020000 mov eax, dword ptr [ebx+000002E4]
:0043FB7D E836B4FDFF call 0041AFB8
:0043FB82 8B06 mov eax, dword ptr [esi]
:0043FB84 8B5008 mov edx, dword ptr [eax+08]
:0043FB87 8B83EC020000 mov eax, dword ptr [ebx+000002EC]
:0043FB8D E826B4FDFF call 0041AFB8
:0043FB92 8B06 mov eax, dword ptr [esi]
:0043FB94 8B500C mov edx, dword ptr [eax+0C]
:0043FB97 8B83F4020000 mov eax, dword ptr [ebx+000002F4]
:0043FB9D E816B4FDFF call 0041AFB8
:0043FBA2 8B06 mov eax, dword ptr [esi]
:0043FBA4 8B5010 mov edx, dword ptr [eax+10]
:0043FBA7 8B83FC020000 mov eax, dword ptr [ebx+000002FC]
:0043FBAD E806B4FDFF call 0041AFB8
:0043FBB2 8B06 mov eax, dword ptr [esi]
:0043FBB4 8B5014 mov edx, dword ptr [eax+14]
:0043FBB7 8B8300030000 mov eax, dword ptr [ebx+00000300]
:0043FBBD E8F6B3FDFF call 0041AFB8
:0043FBC2 8B06 mov eax, dword ptr [esi]
:0043FBC4 8B5018 mov edx, dword ptr [eax+18]
:0043FBC7 8B8304030000 mov eax, dword ptr [ebx+00000304]
:0043FBCD E8E6B3FDFF call 0041AFB8
:0043FBD2 8B06 mov eax, dword ptr [esi]
:0043FBD4 8B501C mov edx, dword ptr [eax+1C]
:0043FBD7 8B830C030000 mov eax, dword ptr [ebx+0000030C]
:0043FBDD E8D6B3FDFF call 0041AFB8
:0043FBE2 8B83D8020000 mov eax, dword ptr [ebx+000002D8]
:0043FBE8 E817B8FDFF call 0041B404
:0043FBED EB14 jmp 0043FC03

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043FB60(C)
|
:0043FBEF 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"ScreenTaker - Error"
|
:0043FBF1 A1241A4400 mov eax, dword ptr [00441A24]
:0043FBF6 50 push eax

##########################################################
* Possible StringData Ref from Code Obj ->"Invalid registration key."
###################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
---->往上看有没有类似je cmp 或jne

:0043FBF7 6858FC4300 push 0043FC58
:0043FBFC 6A00 push 00000000

* Reference To: user32.MessageBoxA, Ord:0000h
|
:0043FBFE E8815CFCFF Call 00405884

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043FA79(C), :0043FBED(U)
|
:0043FC03 33C0 xor eax, eax
:0043FC05 5A pop edx
:0043FC06 59 pop ecx
:0043FC07 59 pop ecx
:0043FC08 648910 mov dword ptr fs:[eax], edx

* Possible StringData Ref from Code Obj ->"^[YY]"
|
:0043FC0B 6825FC4300 push 0043FC25

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043FC23(U)
|
:0043FC10 8D45F8 lea eax, dword ptr [ebp-08]
:0043FC13 BA02000000 mov edx, 00000002
:0043FC18 E8E33AFCFF call 00403700
:0043FC1D C3 ret

别以为这样就大功告成了，嘻嘻.......不信试一下。
虽然填下了乱码，它当时就说注册成功了，但每运行一次都要注册一次，对吗？？？
做为一名小NEWBABIES更要追到底，否则就不会有什么成功的感觉了？动一下脑筋哦？？如果有好方法，请回一贴吧！！！
(待续） 写作时间
2000.2.19.00:10


see This

 标 题:see This 破解实战！ (5千字)
发信人:十三少
时 间:2000-6-26 15:41:04
详细信息:
前言:
最近正在學習脫殼,沒時間搞破解,但見別的Cracker們破得正歡
不禁手痒,于是随便拉了个软件来试试:)

***软件下载:http://61.141.211.51/down/seedst.exe
***软件简介：
    当你从网络上看到好东西的时候，你一定很想把整个画面传给朋友看。See This就是一个这麽好用的小工具，可以把整个屏幕“拍”下来，并且用Email传送出去。如果对方也是See This的用户，画面就会立刻被传出去并且出现在他的屏幕上。要是对方没有使用See This，那麽这张图就会以jpg格式的Email夹文件传出去。
步骤:
1、运行trw2000,再运行seethis.exe,选择输入unlock
随便填入:abcdefghijk(注:不能输入数字,嘿嘿,我trace过,程序中有检测)
2、下:bpx hmemcpy
按"确定"键,程序被拦,
下:pmodule 回到程序领空如下代码,开始trace:)

:004175F9 FF1540424300 Call dword ptr [00434240]
:004175FF 8D7C240C lea edi, dword ptr [esp+0C] <-d edi
:00417603 83C9FF or ecx, FFFFFFFF
:00417606 33C0 xor eax, eax
:00417608 33F6 xor esi, esi
:0041760A F2 repnz
:0041760B AE scasb
:0041760C F7D1 not ecx
:0041760E 49 dec ecx
:0041760F 7425 je 00417636
:00417611 0FBE54340C movsx edx, byte ptr [esp+esi+0C]
:00417616 52 push edx
:00417617 E834E50000 call 00425B50
:0041761C 88443410 mov byte ptr [esp+esi+10], al
:00417620 83C404 add esp, 00000004
:00417623 8D7C240C lea edi, dword ptr [esp+0C]
:00417627 83C9FF or ecx, FFFFFFFF
:0041762A 33C0 xor eax, eax
:0041762C 46 inc esi
:0041762D F2 repnz
:0041762E AE scasb
:0041762F F7D1 not ecx
:00417631 49 dec ecx
:00417632 3BF1 cmp esi, ecx
:00417634 72DB jb 00417611
以上一段代码,大家很容易看出是将输入的注册码,变换成大定字母.go on...!

:00417636 8D44240C lea eax, dword ptr [esp+0C]
:0041763A 6A08 push 00000008
:0041763C 50 push eax
:0041763D 68B09A4300 push 00439AB0
:00417642 E859DE0000 call 004254A0
:00417647 83C40C add esp, 0000000C
:0041764A E821FEFFFF call 00417470 <---注册比较核心,F8追入
:0041764F 85C0 test eax, eax　　<---注册标志
:00417651 751A jne 0041766D <--不为0则跳
:00417653 53 push ebx
:00417654 E807010000 call 00417760
:00417659 83C404 add esp, 00000004
:0041765C B801000000 mov eax, 00000001
:00417661 5F pop edi
:00417662 5E pop esi
:00417663 5B pop ebx
:00417664 81C400010000 add esp, 00000100
:0041766A C21000 ret 0010
3、 在call 00417470处我们追入,看见如下代码:

:00417470 51 push ecx
:00417471 53 push ebx
:00417472 55 push ebp
:00417473 8B2D60B64300 mov ebp, dword ptr [0043B660]
:00417479 56 push esi
:0041747A 57 push edi
:0041747B 8B3D64B64300 mov edi, dword ptr [0043B664]
:00417481 6A08 push 00000008
:00417483 BE01000000 mov esi, 00000001
:00417488 68F09A4300 push 00439AF0
:0041748D 68B09A4300 push 00439AB0
:00417492 33DB xor ebx, ebx
:00417494 8974241C mov dword ptr [esp+1C], esi
:00417498 E8B3D50000 call 00424A50
:0041749D 83C40C add esp, 0000000C
:004174A0 85C0 test eax, eax
:004174A2 7479 je 0041751D <--不能跳哟,一跳则OVER!
:004174A4 6A08 push 00000008
:004174A6 68E49A4300 push 00439AE4
:004174AB 68B09A4300 push 00439AB0
:004174B0 E89BD50000 call 00424A50
:004174B5 83C40C add esp, 0000000C
:004174B8 85C0 test eax, eax
:004174BA 7461 je 0041751D <--不能跳,跳则OVER!
:004174BC 33C0 xor eax, eax
:004174BE 33C9 xor ecx, ecx <---| ebx的由来:
:004174C0 mov cl, byte ptr [eax+00439AB0] | ABCEDFGH分别减去
:004174C6 83C1BF add ecx, FFFFFFBF | 41得到的
:004174C9 83F90F cmp ecx, 0000000F |
:004174CC 774F ja 0041751D |
:004174CE 8BD6 mov edx, esi |
:004174D0 0FAFD1 imul edx, ecx |
:004174D3 03DA add ebx, edx |
:004174D5 C1E604 shl esi, 04 | 这里76543210
:004174D8 40 inc eax |
:004174D9 83F808 cmp eax, 00000008 |
:004174DC 7CE0 jl 004174BE --->|
:004174DE 3BEB cmp ebp, ebx ebp中为153BAF0B
:004174E0 733B jnb 0041751D <--ebp与ebx相等,就不会跳了!
注册码不正确跳则GAMEOVER!

5、所以我们只要使ebx与ebp相等就可以了,
ebx 是输入注册码的变形来的,即abcdefghijk先换成大写字母ABCDEDFHIJK
再取前8位ABCDEFGH的ascII码,分别减去41,得到01234567.
ebp 中为153BAF0B,所以分别将1 5 3 B A F 0 B 加下41得到正确注册
码的ascII 码值为 42 46 44 4C 4B 50 41 4C
换算成为字母为 　　 B F D L K P A L
正确的注册码为LAPKLDFB。

          破解者： 十三少
              China Cracking Group
2000.06.26


ShowDep 4.0 beta 1

 标 题:关于ShowDep 4.0 beta 1的注册码判断算法求逆问题 (1千字)
发信人:郭大志
时 间:2000-6-7 12:48:59
详细信息:
这个东西判断注册码用的是两个迭代，这两个迭代用的是同样的计算
公式，且前一个迭代的输出作为后一个迭代的输入。第一个是对
Name进行迭代，第二个则是对Serial进行迭代。迭代过程中要查一
个表。假定你输入的注册码是“11223344”，则Serial[ ]={0x44,
0x33,0x22,0x11}。

迭代是针对3个长整数（a,b,c）来进行的，用a[k]、b[k]、c[k]分别表示第k轮迭代之前这3个长整数的值，
用a[k+1]、b[k+1]、c[k+1]分别表示第k轮迭代之后这3个长整数的值，
用Name[k]和Serial[k]分别表示你输入的名字和注册码的第k个字节的值，则有迭代公式：
1、a[k+1] = (a[k] >> 8) ^ Table[4 * ((a[k] & 0xFF) ^ Name[k])]；
2、b[k+1] = ((a[k+1] & 0xFF) + b[k]) * 0x08088405 + 1；
3、c[k+1] = (c[k] >> 8) ^ Table[4 * ((c[k] & 0xFF) ^ (b[k+1] >> 24))]；
迭代的初始条件为a[0]=0x12345678，b[0]=0x23456789，c[0]=0x34567890。

以上是针对Name进行迭代，之后还要对Serial进行迭代，将上面的Name[k]用Serial[k]代替即可。
对Name进行迭代后得到的三个长整数将作为对Serial进行迭代的初始值。

注册码正确的条件为：最终得到的第3个长整数为0，即c = 0。

谁能将这个算法求逆？ 这个也许是密码学里头的某种算法，不知谁懂这个？


system menachinc

 标 题:软件 system menachinc 的它用（附：序列号破解） (1千字)
发信人:sunwk
时 间:2000-3-19 22:47:44
详细信息:
软件 system menachinc 的它用（附：序列号破解）

system menachinc是一个很好的系统加强软件，可以帮助删除我们上网后留在硬盘中的cache......。但你知道还可以用它来帮助我们crack吗？让我告诉你，它至少可以承担一部分regmon的工作，帮助我们发现那些有使用次数限制，且将已使用次数和/或未使用次数记录在注册表或硬盘文件上的软件所做的手脚。具体就是用它 system\safe installer功能。以下举例说明。
软件NEVERHACK 2.2版本只能使用15次，猜测它可能将次数记录在注册表中。先启动system menachinc，执行system\safe installer功能，先给报告文件起个名字，指定NEVERHACK.exe所在的路径，再一路next即可。等NEVERHACK自动运行后会告诉你：你已使用了多少多少次，还有多少多少次可以用。ok！关闭它。按下system menachinc上的Done report按钮，过一会NEVERHACK在你注册表或硬盘上做的手脚就都在system menachinc给你的txt文件中了，如下：
NO CHANGES IN TRACKED DRIVES

NO CHANGES MADE TO C:\WINDOWS\SYSTEM.INI...

NO CHANGES MADE TO C:\WINDOWS\WIN.INI...

REGISTRY KEY VALUES CHANGED: (2)
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
Value "NhCount": from "6" to "7" <---这就是记录使用次数的地方。这比用regmon监视，动辄分析几百行乃至上千行的数据简单吧。怎么样，想不到它还可以这样用吧。

附：system menachinc 3.0的注册码破解
不多说了：随便填个数，register；bpx hmemcpy拦截，按F12数下直至 system menachinc告诉你序列号错误；再来一次，F12要少按一次，用F10走，多用D(ump)指令。好象没走几步，d eax就看到了我们输入的错误serial。
知道+ORC所述的“数据约束性”原理吗？下指令 E，用方向键上下看看，发现几个象序列号的数据了吧，我记得好象是有3组。system menachinc的注册说明书中怎么说的：
Standard Edition at $19.95，
Professional Edition at $39.95，
Industrial Edition at $59.95 正好三组。
抄下来，填入看看，反正我是成功了。


Teleport Pro 1.29

 标 题:Teleport Pro破解实战录 (6千字)
发信人:十三少
时 间:2000-5-28 10:09:19
详细信息:
最新版本：Teleport Pro 1.29 Build 1422
文件大小：844KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件可在www.newhua.com.cn下载

软件简介：
    Teleport Pro所能做的，不仅仅是离线浏览某个网页(让你离线快速浏览某个网页的内容当然是它的一项重要功能)，它可以从Internet的任何地方抓回你想要的任何文件，它可以在你指定的时间自动登录到你指定的网站下载你指定的内容，你还可以用它来创建某个网站的完整的镜象，作为创建你自己的网站的参考。前言：Teleport Pro末注册时只有30天的试用期，下面我用
softice4.05、W32dasm来破解它！

1、用W32dasm打开c:\progra~1\teleport pro\pro.exe，将其反汇编，查找
字符串“Thank you! Your copy of Teleport Pro is now registered.”
你会找到如下代码：

* Possible Reference to
String Resource ID=07028: "Thank you! Your copy of Teleport Pro is now registered. Al"
|
:00425F78 68741B0000 push 00001B74
:00425F7D 8D4DF0 lea ecx, dword ptr [ebp-10]
:00425F80 895DFC mov dword ptr [ebp-04], ebx
............
2、向上看，有如下代码(分析见右边注释)
:00425F29 8B87DD000000 mov eax, dword ptr [edi+000000DD]
:00425F2F 33DB xor ebx, ebx
:00425F31 6A0A push 0000000A
:00425F33 53 push ebx
:00425F34 50 push eax
:00425F35 E85B690000 call 0042C895
:00425F3A 8B0D68F04700 mov ecx, dword ptr [0047F068]
:00425F40 83C40C add esp, 0000000C
:00425F43 8945E8 mov dword ptr [ebp-18], eax
:00425F46 3899DB040000 cmp byte ptr [ecx+000004DB], bl
:00425F4C 0F8412020000 je 00426164
:00425F52 3BC3 cmp eax, ebx

* Possible StringData Ref from Data Obj ->"User"
|
:00425F54 BEB8C94700 mov esi, 0047C9B8
:00425F59 0F8406010000 je 00426065
:00425F5F FFB7D5000000 push dword ptr [edi+000000D5]
:00425F65 E896090000 call 00426900　　　<==干什么？F8追入。
:00425F6A 3945E8 cmp dword ptr [ebp-18], eax <==比较什么？
:00425F6D 59 pop ecx
:00425F6E 753A jne 00425FAA　　<--此处不跳，胜利在望，跳转则死！
:00425F70 A114D44700 mov eax, dword ptr [0047D414]
:00425F75 8945F0 mov dword ptr [ebp-10], eax

3、用ice载入pro.exe，
:bpx 00425f5f29
:g
回到程序填入注册信息：
name:yubing
company:[CCG]
registration:78787878 (随便)
按“确定”程序被拦如下：
:00425F29 8B87DD000000 mov eax, dword ptr [edi+000000DD] <--78787878送eax
:00425F2F 33DB xor ebx, ebx
:00425F31 6A0A push 0000000A
:00425F33 53 push ebx
:00425F34 50 push eax <--? eax 可知eax中存放78787878的十六制 4b23526
:00425F35 E85B690000 call 0042C895
:00425F3A 8B0D68F04700 mov ecx, dword ptr [0047F068]
:00425F40 83C40C add esp, 0000000C
:00425F43 8945E8 mov dword ptr [ebp-18], eax <--将4b23526送[ebp-18]
:00425F46 3899DB040000 cmp byte ptr [ecx+000004DB], bl
:00425F4C 0F8412020000 je 00426164
:00425F52 3BC3 cmp eax, ebx |
:00425F54 BEB8C94700 mov esi, 0047C9B8
:00425F59 0F8406010000 je 00426065
:00425F5F FFB7D5000000 push dword ptr [edi+000000D5]
:00425F65 E896090000 call 00426900　　　<==干什么？F8追入。
:00425F6A 3945E8 cmp dword ptr [ebp-18], eax <==什么与4b23526比较呀？
:00425F6D 59 pop ecx
:00425F6E 753A jne 00425FAA　　<--此处不跳，胜利在望，跳转则死！
:00425F70 A114D44700 mov eax, dword ptr [0047D414]
:00425F75 8945F0 mov dword ptr [ebp-10], eax

4、在call 00426900追入分析,按F10继续，直到|
:00426914 83F805 cmp eax, 00000005 <==比较输入注册名的个数是否大于5
:00426917 7304 jnb 0042691D 不于5，则提示错误。
:00426919 33C0 xor eax, eax
:0042691B 5F pop edi
:0042691C C3 ret

:0042691D 53 push ebx
:0042691E 56 push esi
:0042691F BEA4E4FE5D mov esi, 5DFEE4A4 <--------|将输入的
:00426924 33DB xor ebx, ebx |name，变
:00426926 85FF test edi, edi |换，得到
:00426928 7409 je 00426933 |正确的注
:0042692A 57 push edi |册码,有兴趣
:0042692B E8F0560000 call 0042C020 |的话，可
:00426930 59 pop ecx |以制出注册
:00426931 EB02 jmp 00426935 |机!
:00426933 33C0 xor eax, eax |
:00426935 83C0FC add eax, FFFFFFFC |
:00426938 3BD8 cmp ebx, eax |
:0042693A 730C jnb 00426948 |
:0042693C 33343B xor esi, dword ptr [ebx+edi] |
:0042693F F6C340 test bl, 40 |
:00426942 7401 je 00426945 |
:00426944 43 inc ebx |
:00426945 43 inc ebx |
:00426946 EBDE jmp 00426926 <---------|
:00426948 8BC6 mov eax, esi <--将得到的正确的注
册码送eax中
:0042694A 5E pop esi
:0042694B 5B pop ebx
:0042694C 5F pop edi
:0042694D C3 ret

5、开始整理正确的注册码，在
:00425F6A cmp dword ptr [ebp-18], eax
? eax就可看见正确的注册码,赶快拿笔记下十进制的数，去注册吧:)

破解者：十三少[CCG]
China Cracking Group
2000.05.27


ToggleMOUSE 4.4.6

 标 题:ToggleMOUSE 4.4.6 (5千字)
发信人:dr0
时 间:2000-6-28 10:06:04
详细信息:
http://www.toggle.com

这是个很好的鼠标增强工具。它可以输入注册码，不过这里我们不是从输入注册码
时开始跟踪，而是跟踪它启动时的判断过程，从而找到注册码。

用RegMon看一下，发现它启动的时候要读如下几个键：
HKEY_CURRENT_USER\Software\ToggleSoftware\ToggleMOUSE\Registration\Name
HKEY_CURRENT_USER\Software\ToggleSoftware\ToggleMOUSE\Registration\Company
HKEY_CURRENT_USER\Software\ToggleSoftware\ToggleMOUSE\Registration\RegNumber

反汇编其主程序，找到如下的代码片段：

* Possible StringData Ref from Data Obj ->"Registration"
|
:004108AB BEB8F64300 mov esi, 0043F6B8

* Possible StringData Ref from Data Obj ->"RegNumber"
|
:004108B0 68ACF64300 push 0043F6AC
:004108B5 56 push esi
:004108B6 8BC8 mov ecx, eax
:004108B8 E83AE30100 call 0042EBF7 //读取注册码
:004108BD 894508 mov dword ptr [ebp+08], eax //保存注册码
:004108C0 E82DDF0100 call 0042E7F2
:004108C5 8B4004 mov eax, dword ptr [eax+04]
:004108C8 53 push ebx

* Possible StringData Ref from Data Obj ->"Name"
|
:004108C9 68A4F64300 push 0043F6A4
:004108CE 8D4DE8 lea ecx, dword ptr [ebp-18]
:004108D1 56 push esi
:004108D2 51 push ecx
:004108D3 8BC8 mov ecx, eax
:004108D5 E889E30100 call 0042EC63 //读取Name
:004108DA 50 push eax
:004108DB 8D4DF0 lea ecx, dword ptr [ebp-10]
:004108DE E880480100 call 00425163
:004108E3 8D4DE8 lea ecx, dword ptr [ebp-18]
:004108E6 E88B470100 call 00425076
:004108EB E802DF0100 call 0042E7F2
:004108F0 8B4004 mov eax, dword ptr [eax+04]
:004108F3 53 push ebx

* Possible StringData Ref from Data Obj ->"Company"
|
:004108F4 689CF64300 push 0043F69C
:004108F9 8D4DE8 lea ecx, dword ptr [ebp-18]
:004108FC 56 push esi
:004108FD 51 push ecx
:004108FE 8BC8 mov ecx, eax
:00410900 E85EE30100 call 0042EC63 //读取Company
:00410905 50 push eax
:00410906 8D4DEC lea ecx, dword ptr [ebp-14]
:00410909 E855480100 call 00425163
:0041090E 8D4DE8 lea ecx, dword ptr [ebp-18]
:00410911 E860470100 call 00425076
:00410916 E8D7DE0100 call 0042E7F2
:0041091B 8B4004 mov eax, dword ptr [eax+04]
:0041091E 33DB xor ebx, ebx
:00410920 53 push ebx

* Possible StringData Ref from Data Obj ->"LastPageIndex"
|
:00410921 688CF64300 push 0043F68C

* Possible StringData Ref from Data Obj ->"Settings"
|
:00410926 685CE34300 push 0043E35C
:0041092B 8BC8 mov ecx, eax
:0041092D E8C5E20100 call 0042EBF7 //读取注册码的校验和
:00410932 8945E8 mov dword ptr [ebp-18], eax //保存校验和
:00410935 8D45F0 lea eax, dword ptr [ebp-10]
:00410938 50 push eax
:00410939 8D4DF8 lea ecx, dword ptr [ebp-08]
:0041093C E822480100 call 00425163
:00410941 8D4DF8 lea ecx, dword ptr [ebp-08]
:00410944 E8E34B0100 call 0042552C
:00410949 8B45F8 mov eax, dword ptr [ebp-08]
:0041094C 8B37 mov esi, dword ptr [edi]
:0041094E 3958F8 cmp dword ptr [eax-08], ebx
:00410951 7E21 jle 00410974

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00410972(C)
|
:00410953 0FBE0403 movsx eax, byte ptr [ebx+eax] //以下计算注册码
:00410957 50 push eax
:00410958 E8B27A0000 call 0041840F
:0041095D 85C0 test eax, eax
:0041095F 8B45F8 mov eax, dword ptr [ebp-08]
:00410962 59 pop ecx
:00410963 7409 je 0041096E
:00410965 0FBE0C03 movsx ecx, byte ptr [ebx+eax]
:00410969 03CB add ecx, ebx
:0041096B 0FAFF1 imul esi, ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00410963(C)
|
:0041096E 43 inc ebx
:0041096F 3B58F8 cmp ebx, dword ptr [eax-08]
:00410972 7CDF jl 00410953 //循环

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00410951(C)

:00410974 6A64 push 00000064
:00410976 8BC6 mov eax, esi
:00410978 33D2 xor edx, edx
:0041097A 59 pop ecx
:0041097B F7F1 div ecx
:0041097D 8B4D08 mov ecx, dword ptr [ebp+08] //你输入的假注册码
:00410980 81F121332153 xor ecx, 53213321
:00410986 3B4DE8 cmp ecx, dword ptr [ebp-18] //检查校验和
:00410989 7512 jne 0041099D
:0041098B 394508 cmp dword ptr [ebp+08], eax //比较真假注册码
:0041098E 750D jne 0041099D
:00410990 85C0 test eax, eax
:00410992 7409 je 0041099D
:00410994 C7470801000000 mov [edi+08], 00000001 //good guy
:0041099B EB04 jmp 004109A1

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00410989(C), :0041098E(C), :00410992(C)
|
:0041099D 83670800 and dword ptr [edi+08],00000000 //bag guy

根据以上代码可知校验和等于注册码和常数0x53213321异或，校验和放在这里：
HKEY_CURRENT_USER\Software\ToggleSoftware\ToggleMOUSE\Settings\LastPageIndex

注册机也很好写，因其计算过程很简单。

标 题:4.5以后的版本无法注册了 (8千字)
发信人:dr0
时 间:2000-6-28 12:48:00
详细信息:

自4.5版本开始，其Trial version和Licensed version是分开的，即trial版
无法成为注册版了，而Licensed version是可以输入注册码的，但是需要注册码
才能下载得到。4.5.3版本用如下两个键来判断是否过期：
HKEY_CURRENT_USER\Software\ToggleSoftware\ToggleMOUSE\Settings\ScrollSensitivity
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\s363
其中s363这个键最初没有。当剩下的天数小于0x1C时它会生成这个键。

相关的代码如下：

* Referenced by a CALL at Addresses:
|:00406978 , :0040E480 , :00413DBC , :00414548 , :00415A4D
|
:004132BC 55 push ebp
:004132BD 8BEC mov ebp, esp
:004132BF 51 push ecx
:004132C0 51 push ecx
:004132C1 A1F84C4400 mov eax, dword ptr [00444CF8]
:004132C6 53 push ebx
:004132C7 56 push esi
:004132C8 8BF1 mov esi, ecx
:004132CA 8945FC mov dword ptr [ebp-04], eax
:004132CD 8945F8 mov dword ptr [ebp-08], eax
:004132D0 8B4508 mov eax, dword ptr [ebp+08]
:004132D3 57 push edi
:004132D4 8906 mov dword ptr [esi], eax
:004132D6 E8E3DC0100 call 00430FBE
:004132DB 8B4004 mov eax, dword ptr [eax+04]
:004132DE BF50160000 mov edi, 00001650
:004132E3 57 push edi

* Possible StringData Ref from Data Obj ->"Settings"
|
:004132E4 BB8C244400 mov ebx, 0044248C

* Possible StringData Ref from Data Obj ->"ScrollSensitivity"
|
:004132E9 68843E4400 push 00443E84
:004132EE 53 push ebx
:004132EF 8BC8 mov ecx, eax
:004132F1 E86ED80100 call 00430B64 //读取安装日期
:004132F6 3BC7 cmp eax, edi
:004132F8 894604 mov dword ptr [esi+04], eax
:004132FB 7523 jne 00413320
:004132FD 6A00 push 00000000
:004132FF E814740000 call 0041A718
:00413304 59 pop ecx
:00413305 894604 mov dword ptr [esi+04], eax
:00413308 E8B1DC0100 call 00430FBE
:0041330D FF7604 push [esi+04]
:00413310 8B4004 mov eax, dword ptr [eax+04]
:00413313 8BC8 mov ecx, eax

* Possible StringData Ref from Data Obj ->"ScrollSensitivity"
|
:00413315 68843E4400 push 00443E84
:0041331A 53 push ebx
:0041331B E830B60100 call 0042E950 //读取安装日期

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004132FB(C)
|
:00413320 8B06 mov eax, dword ptr [esi]
:00413322 69C09F410000 imul eax, 0000419F
:00413328 50 push eax
:00413329 E8B6620000 call 004195E4
:0041332E 99 cdq
:0041332F B910270000 mov ecx, 00002710
:00413334 F7F9 idiv ecx
:00413336 8D45F8 lea eax, dword ptr [ebp-08]
:00413339 52 push edx

* Possible StringData Ref from Data Obj ->"s%u"
|
:0041333A 68803E4400 push 00443E80
:0041333F 50 push eax
:00413340 E8FF260100 call 00425A44 //生成键名"s363"
:00413345 83C40C add esp, 0000000C
:00413348 8D45F8 lea eax, dword ptr [ebp-08]
:0041334B 8BCC mov ecx, esp
:0041334D 50 push eax
:0041334E E8B03F0100 call 00427303
:00413353 51 push ecx

* Possible StringData Ref from Data Obj ->"Software\Microsoft\Windows\CurrentVersion\Explorer"
|
:00413354 BB4C3E4400 mov ebx, 00443E4C
:00413359 8BCC mov ecx, esp
:0041335B 53 push ebx
:0041335C E89B420100 call 004275FC //读取s363的值
:00413361 BF01000080 mov edi, 80000001
:00413366 8D4508 lea eax, dword ptr [ebp+08]
:00413369 57 push edi
:0041336A 50 push eax
:0041336B E893310000 call 00416503
:00413370 83C410 add esp, 00000010
:00413373 8D4DFC lea ecx, dword ptr [ebp-04]
:00413376 50 push eax
:00413377 E8FF420100 call 0042767B
:0041337C 8D4D08 lea ecx, dword ptr [ebp+08]
:0041337F E80A420100 call 0042758E
:00413384 FF75FC push [ebp-04]
:00413387 E853670000 call 00419ADF
:0041338C 85C0 test eax, eax
:0041338E 59 pop ecx
:0041338F 7425 je 004133B6
:00413391 8B4604 mov eax, dword ptr [esi+04]
:00413394 FF75FC push [ebp-04]
:00413397 894508 mov dword ptr [ebp+08], eax
:0041339A E840670000 call 00419ADF
:0041339F 3B4508 cmp eax, dword ptr [ebp+08]
:004133A2 59 pop ecx
:004133A3 7D0B jge 004133B0 //这里一定要跳
:004133A5 FF75FC push [ebp-04]
:004133A8 E832670000 call 00419ADF
:004133AD 59 pop ecx
:004133AE EB03 jmp 004133B3

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004133A3(C)
|
:004133B0 8B4508 mov eax, dword ptr [ebp+08]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004133AE(U)
|
:004133B3 894604 mov dword ptr [esi+04], eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041338F(C)
|
:004133B6 8BCE mov ecx, esi
:004133B8 E86D000000 call 0041342A //计算剩下的天数
:004133BD 83F81C cmp eax, 0000001C
:004133C0 7D4F jge 00413411 //让它跳走
:004133C2 68A0664400 push 004466A0
:004133C7 FF75FC push [ebp-04]
:004133CA E820620000 call 004195EF
:004133CF 59 pop ecx
:004133D0 85C0 test eax, eax
:004133D2 59 pop ecx
:004133D3 753C jne 00413411
:004133D5 FF7604 push [esi+04]
:004133D8 8D45FC lea eax, dword ptr [ebp-04]

* Possible StringData Ref from Data Obj ->"%d"
|
:004133DB 6818254400 push 00442518
:004133E0 50 push eax
:004133E1 E85E260100 call 00425A44 //写入s363
:004133E6 59 pop ecx
:004133E7 8D45FC lea eax, dword ptr [ebp-04]
:004133EA 59 pop ecx
:004133EB 8BCC mov ecx, esp
:004133ED 50 push eax
:004133EE E8103F0100 call 00427303
:004133F3 51 push ecx
:004133F4 8D45F8 lea eax, dword ptr [ebp-08]
:004133F7 8BCC mov ecx, esp
:004133F9 50 push eax
:004133FA E8043F0100 call 00427303
:004133FF 51 push ecx
:00413400 8BCC mov ecx, esp
:00413402 53 push ebx
:00413403 E8F4410100 call 004275FC
:00413408 57 push edi
:00413409 E897310000 call 004165A5
:0041340E 83C410 add esp, 00000010

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004133C0(C), :004133D3(C)
|
:00413411 8D4DF8 lea ecx, dword ptr [ebp-08]
:00413414 E875410100 call 0042758E
:00413419 8D4DFC lea ecx, dword ptr [ebp-04]
:0041341C E86D410100 call 0042758E
:00413421 8BC6 mov eax, esi
:00413423 5F pop edi
:00413424 5E pop esi
:00413425 5B pop ebx
:00413426 C9 leave
:00413427 C20400 ret 0004

标 题:dr0，实际上只要修改 call 0041342A的函数体，让其返回固定值，即剩下的天数为固定值，就永不过期了 (空)
发信人:guest
时 间:2000-6-28 13:02:05


Touch Typing version 98 3.3

 标 题:Touch Typing version 98 3.3的注册机 (925字)
发信人:郭大志
时 间:2000-6-6 20:29:30
详细信息:

 www.shetef.com
这个软件的主页上还有个注册表监视工具和文件读写监视工具。Touch Typing是用VB5写的。破解的关键在于__vbaStrComp( )和rtcR8ValFromBStr(
  )。

#include <stdio.h>
#include <string.h>

void main(void)
{

char SerialStr[64]="Touch-Typing_000";
char PasswordStr[64]="PA00";
char buf[64];
long serial;
long password;

printf("KeyGen for Touch Typing version 98 3.3.\n");

printf("Input a magic number: ");
scanf("%lu", &password);

sprintf(buf,"%lu", password);
buf[6] = '\0';

sscanf(buf, "%lu", &password);

strcat(PasswordStr, buf);

serial = password * 142L + 48935L;
sprintf(buf, "%lu", serial);
strcat(SerialStr, buf);

printf("Your serial:  ");
puts(SerialStr);
printf("Your password: ");
puts(PasswordStr);
}

标 题:顺便再说一下，破解VB程序最好能熟悉一下x86常用的浮点运算指令。若不懂浮点指令则无法写这个程序的注册机 (2千字)
发信人:郭大志
时 间:2000-6-7 10:24:29
详细信息:

另外，在SoftICE中敲wf命令可以把x86的浮点寄存器栈窗口打开，便于观察浮点运算的过程。rtcR8ValFromBStr( )负责把一个字符串转换成一个浮点数，在rtcR8ValFromBStr( )的函数体的尾部会把转换得到的浮点数用FLD指令加载到浮点寄存器中，如下所示，在执行完指令FLD REAL8 PTR [EBP-08]后敲“dl ebp-8”命令可以看见局部变量[ebp-8]中存放的是转换后的浮点数，且浮点寄存器ST0中也存放该数。然后跟踪，看它如何处理ST0中的这个数即可。

MSVBVM50!rtcR8ValFromBstr
0167:7998D1FE PUSH EBP
0167:7998D1FF MOV EBP,ESP
0167:7998D201 SUB ESP,10
0167:7998D204 PUSH ESI
0167:7998D205 PUSH EDI
0167:7998D206 MOV EDI,[EBP+08]
0167:7998D209 TEST EDI,EDI
0167:7998D20B JNZ 7998D21B
0167:7998D20D FLD REAL8 PTR [7999C918]
0167:7998D213 POP EDI
0167:7998D214 POP ESI
0167:7998D215 MOV ESP,EBP
0167:7998D217 POP EBP
0167:7998D218 RET 0004
0167:7998D21B PUSH EDI
0167:7998D21C CALL [798B19E4]
0167:7998D222 MOV ECX,EAX
0167:7998D224 MOV ESI,EAX
0167:7998D226 MOV AX,[EDI]
0167:7998D229 TEST AX,AX
0167:7998D22C JZ 7998D25D
0167:7998D22E CMP AX,0009
0167:7998D232 JZ 7998D252
0167:7998D234 CMP AX,000A
0167:7998D238 JZ 7998D252
0167:7998D23A CMP AX,000D
0167:7998D23E JZ 7998D252
0167:7998D240 CMP AX,0020
0167:7998D244 JZ 7998D252
0167:7998D246 CMP AX,3000
0167:7998D24A JZ 7998D252
0167:7998D24C MOV [ECX],AX
0167:7998D24F ADD ECX,02
0167:7998D252 ADD EDI,02
0167:7998D255 MOV AX,[EDI]
0167:7998D258 TEST AX,AX
0167:7998D25B JNZ 7998D22E
0167:7998D25D MOV [ECX],AX
0167:7998D260 PUSH 05
0167:7998D262 LEA EAX,[EBP-10]
0167:7998D265 MOV [EBP-08],ESI
0167:7998D268 MOV WORD PTR [EBP-10],0008
0167:7998D26E PUSH EAX
0167:7998D26F CALL 7998D657
0167:7998D274 MOV EDI,EAX
0167:7998D276 PUSH ESI
0167:7998D277 CALL [798B1988]
0167:7998D27D TEST EDI,EDI
0167:7998D27F JGE 7998D289
0167:7998D281 PUSH 00
0167:7998D283 PUSH EDI
0167:7998D284 CALL 798BB385
0167:7998D289 FLD REAL8 PTR [EBP-08] //这里是在取转换结果
0167:7998D28C JMP 7998D213


Turbo browser

 标 题:初学者作品（5） (788字)
发信人:liutong
时 间:2000-5-4 13:04:03
详细信息:
Turbo browser

like explore and add web function.
no place to input name and serial number.
first try to use "bpx showwindow" interrupt when time expired screen
display. But it is difficult for me.
So i try to use W32dasm.
After disassemble, i find one item "your turbo browser will expired
soon". I guess that expire determine maybe near it.
Double click.
Yes find some jnz and jz.
One of them is jump to display the above item.
others was jump to a place where use "xor ax,ax"
and the final jump is to a place where use" push 1, pop ax"
Ok, nomally the ax is used as flag for registered/not register.
So use WinHex edit exe file.
83 E8 00
74 35 -->90 90
48 -->90
74 32 -->90 90
48 -->90
74 05 -->90 90
48 -->90 90
75 2C -->90 90
EB 25


Unfoxall 2.0

 标 题:Unfoxall 2.0 增强版完美破解方法 (2千字)
发信人:000ye
时 间:2000-5-17 3:20:50
详细信息:
《Unfoxall 2.0 增强版完美破解方法》

首先非常感谢TCL朋友，如果不是他把Unfoxall 2.0 增强版(未注册版本)送给我，现在我也不会把这篇文章贴出来！
Unfoxall的确是一个非常优秀的foxpro反编译软件，它取用一机一注册码的方法来对用户进行限制，真讨厌！

破解工具：SoftIce for win95/98

破解方法：
1. 运行unfoxall
2. 用鼠标单击unfoxall菜单->“帮助”, 然后再单击“关于unfoxAll”
3. 待弹出对话框后请再单击“注册”按钮
录入如下资料：
用户姓名：000ye
用户单位：china
4. 单击“生成待注册文件”按钮
5. 这时系统会在本目录下生成一个名为“unfoxAll.ini”的文件
6. ctrl+D, 激活softIce
7. bpx hmemcpy
8. 按F5
9. 用鼠标单击“注册unfoxAll”按钮，这时程序被拦
A. BD *，按F12, 直到进入unfoxAll的领空(不知按多少下)
B. bpx 0048FC64 (这个步骤非常重要)
C. 按F5，然后再根据实际情况操作，这时系统会出现两个提示框，当你按“确认”后，系统会自动退出(这是好现象)
D. 重新启动unfoxAll，这时程序会在xxxx:0048FC64处被拦
xxxx:0048FC5F MOV EAX, [006E0CFC] ; d eax 这是真正的注册码
xxxx:0048FC64 MOV EDX, [EBP-10] ; d edx 这是你所谓的注册码
xxxx:0048FC67 CALL 00403F18 ; 注册码比较的call
xxxx:0048FC6C JNZ 0048FCA2 ; 不相等则跳
E. d eax, 还不赶快把它抄下来？我这里看到的是“5304C7A1”

得到注册码后如何注册？
1. 首先打开unfoxAll目录下的unfoxAll.ini文件
2. 这时你会看到如下东东：
[UserInfo]
UserName=000ye
UserCompany=china
UserKey=E90666CF (这个东东因机器不同而不同)
SerialNumber=[Not Registered]
3. 把其改为这样：
[UserInfo]
UserName=000ye
UserCompany=china
UserKey=E90666CF
SerialNumber=5304C7A1
改完后请保存退出
4. 用鼠标单击unfoxall菜单->“帮助”, 然后再单击“关于unfoxAll”
5. 待弹出对话框后请再单击“注册”按钮
6. 用鼠标单击“注册unfoxAll”按钮
7. 选择“unfoxall.ini”文件，然后再按“打开”按钮
8. 最后根据实际情况操作，就这样，unfoxAll已经被成功注册了，高兴吗？

000ye [CCG]
2000.05.17


Update Now 2.0

 标 题:一篇破文(Update Now 2.0)! (2千字)
发信人:十三少
时 间:2000-5-14 15:06:08
详细信息:
今天破掉了Update Now2.0(主页上传工具)，这次选了个最简单
的name选1。
Name:1
RegisterKey:881cdceed7c4
这个软件注册检验部分十有趣，注册码根据注册
名运算得出，但注册码必须软件是12位，现在好
多程序都要求注册码位是固定的哟，:)
好了，废话少说，程序破解于下，请注意听哟：
1、用ice载入Update Now2.0
2、输入注册信息
name:1 &任意输入
register key:123456789012 &任意输入，(此例中便于观察)。
3、下
:bpx hmemcpy
:g
回到程序界面时，按“OK”
4、程序被拦下来，按几下F12回到程序领空，见如下代码：
XXXX:00407643 push 000003F1
XXXX:00407648 mov ecx, ebx |
XXXX:0040764A Call 00416876
XXXX:0040764F cmp eax, 0000000C &比较注册是否为12位
XXXX:00407652 jne 00407862 &不是12位，则死!
XXXX:00407658 lea edi, dword ptr [esp+00000124]
XXXX:0040765F or ecx, FFFFFFFF
XXXX:00407662 xor eax, eax

程序继续。。。到
:004076E0 mov dl, byte ptr [esp+eax+29] & d esp+eax+28便可看
:004076E4 mov cl, byte ptr [esp+eax+28] & 到你输入的注册码：
:004076E8 mov byte ptr [esp+eax+28], dl & 123456789012
:004076EC mov byte ptr [esp+eax+29], cl
:004076F0 inc eax
:004076F1 cmp eax, 00000006
:004076F4 jl 004076E0
:004076F6 dec esi
:004076F7 jne 004076DE
:004076F9 lea edi, dword ptr [esp+00000228] &此时下d eax+esp+22
&可以看见你输入的注册码
&被变为712345689012
以上段代码是你输入注册码的变形，我们此时输入的注册码为123456789012 被变为
712345689012，也就是说将我们输入的注册码的第7位移到了第一位!
5、程序继续执行，(F10)下面到了如下代码：
:004077AE Call dword ptr [004194B4] &注册码比较核心，F8追入哟!
:004077B4 add esp, 0000000C
:004077B7 test eax, eax &检验注册标记
:004077B9 pop ebp
:004077BA jne 00407838 &不为0，则死!
:004077BC mov esi, dword ptr [esp+0C]
:004077C0 push eax

6、让我们看看注册码比较核心部分的代码：
XXXX:78010C8E PUSH EBP
MOV EBP,ESP
...............................
XXXX:78010CAF MOV AL,[ESI-01] &下d esi-01 即可看见e881cdced7c4
XXXX:78010CB2 XOR ECX,ECX &由你用户名算出来的注册码
:78010CB4 CMP AL,[EDI-01] &下d edi-01 即可看见712345689012
:78010CB7 JA 78010CBD
:78010CB9 JZ 78010CBF
...................(略)
*****7、最后整理一下，重新注册，直接输入注册码e881cdced7c4，哇!怎么
不对？？？哈哈，由于作者对你输入的注册码做了一个小变化，将第7位调到
第1位了，所以我们输入注册码的时候，就要输入e881cdced7c4的第1位调到第
7位，应该为881cdceed7c4，于是OK!

破解者：十三少
scyb@sina.com
http://scyb.yeah.net
00.05.14


update now 2.0

有谁可以解掉update now 2.0?把过程POST出来？

标 题:解了，如下 (4千字)
发信人:guest
时 间:2000-6-2 15:17:50
详细信息:

1、这个东西似乎用Aspack压缩的，脱壳很容易。咱不讨论这个。
2、它用MeltICE的方法来检测SoftICE，即
CreateFileA("\\\\.\\SICE", ...)
CreateFileA("\\\\.\\NTICE", ...)
所以只要用bpx CreateFileA do "d *(esp+4)"设断点，等看见它欲打开SoftICE的driver时，把上面的文件名改掉糊弄它即可。用FrogsICE欺骗也行。
3、输入注册码之后它并不立即判断，而是用WritePrivateProfileStringA( )写入c:\windows\update.ini中，下次启动的时候再判断。
4、用bpx GetPrivateProfileStringA do "d *(esp+8)"设断点，然后再启动它，等看见它读NAME和SERIAL时，让它读出来，然后用BPR监视读出来的NAME和SERIAL，就会看见判断注册码的整个过程。
它先计算NAME的累加和，然后每次用wsprintfA( )生成注册码中的两个字符，总共有12字符。

0167:0042EBD6 MOV BL,[EAX+ESP+1C]
0167:0042EBDA ADD DL,BL //求累加和
0167:0042EBDC INC EAX
0167:0042EBDD CMP EAX,ECX
0167:0042EBDF JL 0042EBD6
0167:0042EBE1 MOV [ESP+10],DL
......
0167:0042EC2B MOV ESI,[ESP+10]
0167:0042EC2F MOV EDI,[ESP+18]
0167:0042EC33 MOV ECX,[ESP+14]
0167:0042EC37 LEA EAX,[EBX+ESP+1C]
0167:0042EC3B XOR EDX,EDX
0167:0042EC3D MOV DL,[EAX+ECX]
0167:0042EC40 XOR ECX,ECX
0167:0042EC42 MOV CL,[EAX]
0167:0042EC44 XOR EDX,ECX
0167:0042EC46 XOR EDX,EDI
0167:0042EC48 XOR EDX,ESI
0167:0042EC4A PUSH EDX
0167:0042EC4B LEA EDX,[ESP+00000120]
0167:0042EC52 PUSH 0047E198 //格式字符串 "%02x"
0167:0042EC57 PUSH EDX
0167:0042EC58 CALL [USER32!wsprintfA]
0167:0042EC5E LEA EDI,[ESP+00000128]
0167:0042EC65 OR ECX,-01
0167:0042EC68 XOR EAX,EAX
0167:0042EC6A ADD ESP,0C
0167:0042EC6D REPNZ SCASB
0167:0042EC6F NOT ECX
0167:0042EC71 SUB EDI,ECX
0167:0042EC73 MOV ESI,EDI
0167:0042EC75 MOV EDI,[ESP+00000224]
0167:0042EC7C MOV EDX,ECX
0167:0042EC7E OR ECX,-01
0167:0042EC81 REPNZ SCASB
0167:0042EC83 MOV ECX,EDX
0167:0042EC85 DEC EDI
0167:0042EC86 SHR ECX,02
0167:0042EC89 REPZ MOVSD
0167:0042EC8B MOV ECX,EDX
0167:0042EC8D AND ECX,03
0167:0042EC90 INC EBX
0167:0042EC91 CMP EBX,EBP
0167:0042EC93 REPZ MOVSB
0167:0042EC95 JL 0042EC2B //循环

它还要将这12个字符中的首字符用相邻两字符交换位置的方法放到第8个字符的位置上。并将这12个字符中的前7个字符都与0x67相或。
0167:0042ECA2 OR ESI,-01
0167:0042ECA5 LEA EAX,[ECX+01]
0167:0042ECA8 SUB ESI,ECX
0167:0042ECAA MOV DL,[EAX]
0167:0042ECAC MOV CL,[EAX-01]
0167:0042ECAF OR DL,67
0167:0042ECB2 OR CL,67
0167:0042ECB5 MOV [EAX-01],DL //交换位置
0167:0042ECB8 MOV [EAX],CL //交换位置
0167:0042ECBA INC EAX
0167:0042ECBB LEA ECX,[EAX+ESI]
0167:0042ECBE CMP ECX,EBP
0167:0042ECC0 JL 0042ECAA

再把你输入的假注册码的前7个字符也与0x67相或，然后就比较。
0167:00428862 REPNZ SCASB
0167:00428864 NOT ECX
0167:00428866 DEC ECX
0167:00428867 LEA EDI,[ESP+00000164]
0167:0042886E MOV EDX,ECX
0167:00428870 OR ECX,-01
0167:00428873 REPNZ SCASB
0167:00428875 NOT ECX
0167:00428877 DEC ECX
0167:00428878 CMP ECX,EDX //比较真假注册码的长度，为12
0167:0042887A JZ 004288A6
0167:0042887C PUSH 6C
0167:0042887E CALL 004531B7
..............
0167:004288BA MOV AL,[ECX+ESP+000000E4]
0167:004288C1 MOV DL,[ECX+ESP+00000164]
0167:004288C8 CMP AL,DL //比较
0167:004288CA JNZ 004288CF
0167:004288CC DEC ECX
0167:004288CD JNS 004288BA
0167:004288CF LEA EDI,[ESP+000000E4]
0167:004288D6 OR ECX,-01
0167:004288D9 XOR EAX,EAX
0167:004288DB XOR EDX,EDX
0167:004288DD REPNZ SCASB
0167:004288DF NOT ECX
0167:004288E1 DEC ECX
0167:004288E2 JZ 00428977
0167:004288E8 MOV CL,[EDX+ESP+00000164]
0167:004288EF MOV AL,[EDX+ESP+000000E4]
0167:004288F6 CMP CL,AL //比较
0167:004288F8 JNZ 00428912

也就是说，它不是直接比较注册码，而是把真假注册码都与0x67相或之后再进行比较。

Name: Netguy/CrackingForFun
Code: 3c8d99e3dfc0

标 题:key generator (1千字)
发信人:guest
时 间:2000-6-2 16:44:12
详细信息:

#include <stdio.h>
#include <string.h>

void main(void)
{
char Buf[128];
char Name[128];
char Serial[13];
int k, len;
char sum, repeat;
const char home[]="www.pcchina.net";

printf("KeyGen for Update NOW! 2.0.\n");
printf("coded by Netguy.\n");

printf("Input your name: ");
gets(Name);

strcpy(Buf, Name);

len = strlen(Name);
for(k = 0; k < 6; k++)
{
Name[k] &= 0x7F;
}

repeat = 6 / len;
for (k = 0; k < repeat; k++)
{
strcat(Name, Buf);
}

len = strlen(Name);
sum = 0;
for(k = 0; k < len; k++)
{
sum += Name[k];
}

Serial[0] = '\0';
for(k = 0; k < 6; k++)
{
Name[k] ^= sum;
Name[k] ^= 0xC7;
Name[k] ^= home[k];
sprintf(Buf, "%02x", Name[k] & 0xFF);
strcat(Serial, Buf);
}

printf("Your registration code is: ");
for (k = 1; k <= 6; k++) putchar(Serial[k]);
putchar(Serial[0]);
puts(&Serial[7]);
}


Visual Zip Password Recovery Processor v3.2

 标 题:破解Visual Zip Password Recovery Processor v3.2 初级 (3千字)
发信人:DDXia
时 间:2000-2-27 12:31:07
阅读次数:529
详细信息:
破解Visual Zip Password Recovery Processor v3.2（转载希望保持完整）
作者：丁丁虾 又名：DDXia [CCG]
级别：初级

昨晚，赶写方案，第一次写真是累坏我，左忙忙，右忙忙，耗到晚上11点，

，写你不容易！今早又要陪领导去客户处导游，起得特别的早，去华军处看看有什么

好的软件，真的发现一个好软件。

最新版本：3.2(4.0 Beta 3)
文件大小：528KB
软件授权：共享软件
使用平台：Win95/98/NT
软件简介：
    ZIP 压缩文件密码恢复软件，最大的特点是支持多处理器和网络运算，使得其能

够发挥更快的速度去寻找你丢失的密码。使用图形操作界面，可自定最小与最大密码

长度及数字、字母、符号来'查'密码。亦有中断密码查询及储存功能，下次要恢复前

次的查询时，只需将储存的文件读入即可继续上次的查询，亦提供多种不同暴力查询

模式，请勿用于不法用途。
http://www.newhua.com/down/vzprp32.zip

安装后，发现它只有315KB，一想功能可以支持多处理器和网络运算，功能如此

强大，为何这么小呢？？肯定是PACK过的，CHECK一下，果然是用ASPack 1.02b压缩

，UNPACK IT（功力还没有到这一层，只好借助一下解压罗^_^），依然用W32DASM--
破解中的精品。
老方法，查询出错信息-----"Password is invalid!"；可以看到以下代码：

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047B79C(C)
|^^^^^^^^^^^-------->这个是追查的关键。发现REG错误后，跳到这里。

:0047B930 6A00 push 00000000
:0047B932 668B0D70B94700 mov cx, word ptr [0047B970]
:0047B939 B201 mov dl, 01

* Possible StringData Ref from Code Obj ->"Password is invalid!"
|
:0047B93B B89CB94700 mov eax, 0047B99C
:0047B940 E89742FDFF call 0044FBDC

看一看0047B79C处的代码：
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047B796(C)
|
:0047B78F 8A10 mov dl, byte ptr [eax]
:0047B791 0055D8 add byte ptr [ebp-28], dl
:0047B794 40 inc eax
:0047B795 4B dec ebx
:0047B796 75F7 jne 0047B78F
:0047B798 807DD800 cmp byte ptr [ebp-28], 00
:0047B79C 0F858E010000 jne 0047B930
^^^^^^^^^^^^----->试一试把它nop掉
:0047B7A2 BB40000000 mov ebx, 00000040
:0047B7A7 8B35E0EC4700 mov esi, dword ptr [0047ECE0]

哈哈。。。一注册就THANK YOU！
别急，它还有一个信息提示："Unregistered version!" 再把它给去掉吧！

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047B0AB(C)
|
:0047B0A4 8A10 mov dl, byte ptr [eax]
:0047B0A6 0055D8 add byte ptr [ebp-28], dl
:0047B0A9 40 inc eax
:0047B0AA 4B dec ebx
:0047B0AB 75F7 jne 0047B0A4
:0047B0AD 807DD800 cmp byte ptr [ebp-28], 00
:0047B0B1 7473 je 0047B126
^^^^^^^^^^^----->改为JMP 0047B126
如何找到它呢？----查找"Unregistered version!"

:0047B0B3 8B45EC mov eax, dword ptr [ebp-14]
:0047B0B6 8B80DC020000 mov eax, dword ptr [eax+000002DC]

* Possible StringData Ref from Code Obj ->"Unregistered version!"
|
:0047B0BC BAECB14700 mov edx, 0047B1EC
:0047B0C1 E87E24FBFF call 0042D544
:0047B0C6 A100EF4700 mov eax, dword ptr [0047EF00]
:0047B0CB C60000 mov byte ptr [eax], 00
:0047B0CE 8B45EC mov eax, dword ptr [ebp-14]
:0047B0D1 8B80DC020000 mov eax, dword ptr [eax+000002DC]
:0047B0D7 8B4058 mov eax, dword ptr [eax+58]
:0047B0DA BAFF000000 mov edx, 000000FF
:0047B0DF E878AFF9FF call 0041605C

收工，我要上班了。
完成时间
2000.2.25 上午8:10
耗时14分钟


WebZIP 3.71.508

 标 题:WebZIP 3.71.508 (5千字)
发信人:dr0
时 间:2000-6-24 16:08:01
详细信息:
http://www.spidersoft.com

这个软件用如下的指令段判断注册码。经过几次试探发现该函数返回0xC8
则显示“Tnank you for registering WebZip!”。

0167:004E7402 MOV EDX,[EBP-08]
0167:004E7405 MOV EAX,EBX
0167:004E7407 CALL 004E75A4 //这里头判断注册码
0167:004E740C SUB EAX,000000C8 //返回C8表示注册码正确
0167:004E7411 JZ 004E741B
0167:004E7413 DEC EAX //返回C9则错误
0167:004E7414 JZ 004E743E
0167:004E7416 DEC EAX //返回CA则错误
0167:004E7417 JZ 004E744B
0167:004E7419 JMP 004E745D //返回其它值

跟进上面的那个CALL，看见函数体如下：

0167:004E75A4 PUSH EBP
0167:004E75A5 MOV EBP,ESP
0167:004E75A7 ADD ESP,-10
0167:004E75AA PUSH EBX
0167:004E75AB PUSH ESI
0167:004E75AC PUSH EDI
0167:004E75AD XOR ECX,ECX
0167:004E75AF MOV [EBP-08],ECX
0167:004E75B2 MOV [EBP-04],ECX
0167:004E75B5 MOV EDI,EDX
0167:004E75B7 MOV EBX,EAX
0167:004E75B9 XOR EAX,EAX
0167:004E75BB PUSH EBP
0167:004E75BC PUSH 004E76E9
0167:004E75C1 PUSH DWORD PTR FS:[EAX]
0167:004E75C4 MOV FS:[EAX],ESP
0167:004E75C7 LEA EAX,[EBP-04]
0167:004E75CA PUSH EAX
0167:004E75CB MOV EAX,EDI
0167:004E75CD CALL 0040407C
0167:004E75D2 MOV EDX,EAX
0167:004E75D4 DEC EDX
0167:004E75D5 MOV ECX,00000002
0167:004E75DA MOV EAX,EDI
0167:004E75DC CALL 00404284
0167:004E75E1 MOV EAX,[EBP-04] //你输入的注册码的后两个字符
0167:004E75E4 MOV EDX,004E7704 // "1Y"
0167:004E75E9 CALL 0040418C //比较
0167:004E75EE JNZ 004E75F7 //若最后两位是1Y
0167:004E75F0 MOV ESI,0000016D //则为错误的注册码
0167:004E75F5 JMP 004E7632
0167:004E75F7 XOR EAX,EAX
0167:004E75F9 PUSH EBP
0167:004E75FA PUSH 004E7619
0167:004E75FF PUSH DWORD PTR FS:[EAX]
0167:004E7602 MOV FS:[EAX],ESP
0167:004E7605 MOV EAX,[EBP-04] //注册码的后两位
0167:004E7608 CALL 0040977C //转换成整数
0167:004E760D MOV ESI,EAX //保存在esi中
0167:004E760F XOR EAX,EAX
0167:004E7611 POP EDX
0167:004E7612 POP ECX
0167:004E7613 POP ECX
0167:004E7614 MOV FS:[EAX],EDX
0167:004E7617 JMP 004E7632
0167:004E7619 JMP 0040355C
0167:004E761E MOV EBX,000000C9
0167:004E7623 CALL 004038B8
0167:004E7628 JMP 004E76CE
0167:004E762D CALL 004038B8
0167:004E7632 TEST ESI,ESI //后两位为00吗？
0167:004E7634 JNZ 004E7661 //不为00则错误
0167:004E7636 LEA EAX,[EBP-04]
0167:004E7639 PUSH EAX
0167:004E763A MOV EDX,[EBX+6C]
0167:004E763D MOV EAX,[EBX+34]
0167:004E7640 MOV ECX,ESI
0167:004E7642 CALL 004E5298
0167:004E7647 MOV EAX,[EBP-04] //正确的注册码
0167:004E764A MOV EDX,EDI //你输入的假注册码
0167:004E764C CALL 0040418C //比较注册码
0167:004E7651 JNZ 004E765A
0167:004E7653 MOV EBX,000000C8 //返回C8表示OK
0167:004E7658 JMP 004E76CE
0167:004E765A MOV EBX,000000C9 //返回C9则错误
0167:004E765F JMP 004E76CE
0167:004E7661 LEA EAX,[EBP-04]
0167:004E7664 PUSH EAX
0167:004E7665 MOV EDX,[EBX+6C]
0167:004E7668 MOV EAX,[EBX+34]
0167:004E766B MOV ECX,ESI
0167:004E766D CALL 004E5298
0167:004E7672 MOV EAX,[EBP-04]
0167:004E7675 MOV EDX,EDI
0167:004E7677 CALL 0040418C
0167:004E767C JNZ 004E76C9
0167:004E767E INC DWORD PTR [EBX+44]
0167:004E7681 LEA EDX,[EBP-08]
0167:004E7684 MOV EAX,EBX
0167:004E7686 CALL 004E8660
0167:004E768B MOV EDX,[EBP-08]
0167:004E768E LEA EAX,[EBX+34]
0167:004E7691 CALL 00403E50
0167:004E7696 XOR EAX,EAX
0167:004E7698 MOV [EBX+3C],EAX
0167:004E769B CALL 0040AD24
0167:004E76A0 CALL 00402BAC
0167:004E76A5 SUB EAX,01
0167:004E76A8 SBB EDX,00
0167:004E76AB MOV [EBP-10],EAX
0167:004E76AE MOV [EBP-0C],EDX
0167:004E76B1 FILD QWORD PTR [EBP-10]
0167:004E76B4 FSTP REAL8 PTR [EBX+48]
0167:004E76B7 WAIT
0167:004E76B8 ADD [EBX+40],ESI
0167:004E76BB MOV EAX,EBX
0167:004E76BD CALL 004E7B50
0167:004E76C2 MOV EBX,000000CA //返回CA也错误
0167:004E76C7 JMP 004E76CE
0167:004E76C9 MOV EBX,000000C9 //返回C9则错误
0167:004E76CE XOR EAX,EAX
0167:004E76D0 POP EDX
0167:004E76D1 POP ECX
0167:004E76D2 POP ECX
0167:004E76D3 MOV FS:[EAX],EDX
0167:004E76D6 PUSH 004E76F0
0167:004E76DB LEA EAX,[EBP-08]
0167:004E76DE MOV EDX,00000002
0167:004E76E3 CALL 00403E20
0167:004E76E8 RET
0167:004E76E9 JMP 00403810
0167:004E76EE JMP 004E76DB
0167:004E76F0 MOV EAX,EBX //函数的返回值
0167:004E76F2 POP EDI
0167:004E76F3 POP ESI
0167:004E76F4 POP EBX
0167:004E76F5 MOV ESP,EBP
0167:004E76F7 POP EBP
0167:004E76F8 RET

由此得到一个注册码：
User Name: dr0
Serial No: China
Reg Key: AE33536C8300

注册成功的标志是下面的选项可以使用：
菜单View－>Options－>General Settings－>Turn off banner ad insertion。


Windows优化大师2.5的patch

 标 题:Windows优化大师2.5的patch (1千字)
发信人:guest
时 间:2000-6-4 21:32:06
详细信息:
http://www.newhua.com.cn/down/Wom.zip

判断注册码的程序段在如下的地方。可见，只要把
CMP EAX,14改为XOR EAX,EAX即可注册成功。我有兴趣研究一下它的算法，若有人已经搞清其算法的话请通知一声。

0167:004D7C1A LEA ECX,[EBP-08]
0167:004D7C1D MOV EDX,004D7CF8 //Register_1
0167:004D7C22 MOV EAX,ESI
0167:004D7C24 CALL 00453204
0167:004D7C29 LEA ECX,[EBP-0C]
0167:004D7C2C MOV EDX,004D7D30 //Register_2
0167:004D7C31 MOV EAX,ESI
0167:004D7C33 CALL 00453204
0167:004D7C38 MOV EAX,ESI
0167:004D7C3A CALL 00452AFC
0167:004D7C3F MOV EAX,ESI
0167:004D7C41 CALL 00402FC4
0167:004D7C46 MOV EAX,[EBP-08]
0167:004D7C49 CALL 004D7900 //字符串转换成十六进制数
0167:004D7C4E CDQ
0167:004D7C4F PUSH EDX
0167:004D7C50 PUSH EAX
0167:004D7C51 MOV EAX,[EBP-0C]
0167:004D7C54 CALL 004D7900 //字符串转换成十六进制数
0167:004D7C59 CDQ
0167:004D7C5A PUSH EDX
0167:004D7C5B PUSH EAX
0167:004D7C5C LEA EDX,[EBP-0170]
0167:004D7C62 MOV EAX,[004F7EEC]
0167:004D7C67 CALL 00408944
0167:004D7C6C MOV EAX,[EBP-0170]
0167:004D7C72 CALL 00404074
0167:004D7C77 CALL 004D7854 //判断注册码
0167:004D7C7C CMP EAX,14 //eax若为14则注册码正确
0167:004D7C7F JZ 004D7C88
0167:004D7C81 MOV EBX,00000001
0167:004D7C86 JMP 004D7C8A
0167:004D7C88 XOR EBX,EBX


winhex v9.3

标 题:破解winhex v9.3------上篇
发信人:DDXia[CCG
时 间:2000年04月08日
详细信息:

级别：战国时期-----由于局势不稳定-------还是请前辈们指点一二
作者：丁丁虾 又名：DDXia [CCG]
目的：非常的天真无‘牙’------好象小虾米的牙真的看不见哦！：D（不以任何商业用途为目的）
赞助：WINICE.DAT----------非常非常的感谢看雪兄的礼品。看雪真得很乐于助人。

软件名称：WinHEX
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：http://www.muenster.de/~sf/winhex.html
软件简介：
       WinHEX V9.30 for 95/98/NT。共享。老牌 Hex 十六进制编辑器工具，文件小、速度快，可做 Hex

与 SCII 码。编辑修改，多文件搜寻取代功能，一般运算及逻辑运算，硬盘磁区编辑（支持 FAT16、

FAT32 和 NTFS）自动搜寻编辑，文件对比和分析等功能，另外 V8.4 版新增了 RAM 編輯功能。

昨夜寒蛩不住鸣，惊回千里梦，已三更。
起来独自绕阶行，人悄悄，帘外月胧明。

白首为功名，旧山松竹老，阻归程。
欲将心事付瑶琴，
知音少，弦断有谁听。 《小重山》----岳飞

刚刚背得一首词，好东东大家分享嘛！！！
WINHEX9.3的破解真的真的很好玩！
1、看一看它的注册方式，有点儿象UtralEdit，运行后，点击HELP----》Registration 会出现两个CODE

需要填写：
CODE1：123456789
CODE2：987654321
然后提示重新启动，没有任何的提示你输入的CODE是否正确，唯一的提示是菜单上的Registration还

在，需要重新注册它。

2、猜想它一定是先把CODE存于某个地方，然后重新启动时，再检查它，所要做的是找到那个地方，

这步非常关键，如果找不到，就没有办法拦截它，也没有办法破它了。不过，还有一种方法就是从头开始

的去读懂该程序。：） 阿拉功力有限。

3、猜想一：存在注册表中。启动Register　Monitor，嗨！！无功而返。
猜想二：存在文件中。启动File　Monitor，嗨！！还是无功而返。
猜想三：存在硬盘的某个扇区中。看了一下用它调用的API Function，没有哪个是对硬盘扇区进行

读写的！（怎么看它调用的API Function？我就知道你会问。其实用W32DASM反编译后，在它的工具条

中有一个按钮‘Imp In’，点击它就行了）
MY GOD！！！于是放了两天的时间。在一个偶然的机会看到了000ye写的一篇文章。

原文如下：{{

WinHex ver9.25是一个很优秀的Hex与ASCII码编辑软件，它不但体积小，而且功能强大，尤其对中文兼

容性极好，与UltraEdit-32相比，真的各有千秋，令人难以取舍，但UltraEdit-32对中文兼容性不是那么好

，有时用它把程序中的中文修改为英文(或英文修改为中文)后，重新运行程序，会发觉系统报错：产生无

效页面或此程序进行非法操作等，不如各位网友可有同感？WinHex防解密的手段主要是：先把Code1和

Code2储存在内存中，然后在重新运行程序的时候进行注册码比对，大家可以拿它来练习练习。下载网址

：http://www.joyo.com

000ye
2000.03.14 }}
非常感谢000ye的TIPS

好家伙！ 居然存在内存中，好过分。相信各位心中有底了吧！！

这回我要换工具了，由于TRW2000还不是很完善，但它毕竟是中国人的骄傲啊！！是不是呢？？

初初用SOFTICE，还是有点生生的。安装它用去我大约两个小时，下载的SOFTICE4.0 4.05除了要sn，还

要什么的产品号及服务号！弄得俺满世界得乱窜。幸好关键时候，看雪兄出现，一切都OK！！原来我下

载的全是升级版，需要先安装SOFTICE 3.25（对了，在阿伦的主页中有）,然后再装升级版。还有看雪兄

的winice.dat文件使SOFTICE看起来象TRW2000的界面。

4、破解它：输入注册码，CTRL+D跳出SOFTICE，然后设断点，BPX HMEMCPY，CTRL+D返

回程序，按OK，被中断，记得 BD *可以按一下F11（有点象TRW2000中的PMOUDLE。具体的可以看一

下看雪主页的SOFTICE教学），然后按N次F12，还有N次F10，还有N次F8，哈哈哈，哈哈，其实我也不

知道到底按了多少，原因有两个，一是比较懒；二是返回程序代码中就行了。--------其实你们应该比俺熟

悉多了。:)) 然后来到下面程序。

* Reference To: user32.GetDlgItemInt, Ord:0000h
|
:0042358B E8B016FEFF Call 00404C40------------------->取回输入数值的十六进制，存于EAX
123456789=0x75BCD15
:00423590 25FFFFFF7F and eax, 7FFFFFFF
^^^^^^^^^^^^^^^^^^^^^^------------>返回此处，如果能拦截到GetDlgItemInt函数

，按一下F11就可以返回了。

:00423595 8945FC mov dword ptr [ebp-04], eax------>ebp-04=0x69F8CC
:00423598 6A00 push 00000000
:0042359A 68F8424500 push 004542F8
:0042359F 680B030000 push 0000030B
:004235A4 8B03 mov eax, dword ptr [ebx]
:004235A6 50 push eax

* Reference To: user32.GetDlgItemInt, Ord:0000h
|
:004235A7 E89416FEFF Call 00404C40------------------->987654321=0x3ADE68B1
:004235AC 25FFFFFF7F and eax, 7FFFFFFF
:004235B1 8945F8 mov dword ptr [ebp-08], eax------>存于ebp-08=0x69FC8

于是拦截 bpm 69F8CC
bpm 69F8C8
CTRL+D一会儿又被拦下来。BD * 看到如下代码：

:00424C37 8B55FC mov edx, dword ptr [ebp-04]------------->被拦截下来。
:00424C3A 8915A4214500 mov dword ptr [004521A4], edx-------->存入地址为4521A4内存中
:00424C40 8B55F8 mov edx, dword ptr [ebp-08]
:00424C43 8915A8214500 mov dword ptr [004521A8], edx-------->存入地址为4521A8内存中

总算是捉到你了！！！害得俺20:30还没有得吃晚饭。其实喝了一肚子的水。
退出WINHEX程序
设断点；bpm 4521A4
bpm 4521A8

:0043C340 A31C454500 mov dword ptr [0045451C], eax
:0043C345 8B879C000000 mov eax, dword ptr [edi+0000009C]-------->这里被拦下来！

EAX=0x75BCD15----CODE1

:0043C34B 03C0 add eax, eax
:0043C34D 8D0480 lea eax, dword ptr [eax+4*eax]
:0043C350 058A000000 add eax, 0000008A
:0043C355 3B87A0000000 cmp eax, dword ptr [edi+000000A0]
^^^^^^^^^^^^^^^^^^^^^^--------> [edi+000000A0]=0x3ADE68B1----CODE2
赶快把它记下来。0x4996035C =1234568028

:0043C35B 0F940505434500 setz byte ptr [00454305]------>如果相等的话，设为1。
:0043C362 8D8770010000 lea eax, dword ptr [edi+00000170]
:0043C368 50 push eax
:0043C369 E83A86FCFF Call 004049A8
:0043C36E A304454500 mov dword ptr [00454504], eax
:0043C373 803D1343450000 cmp byte ptr [00454313], 00
:0043C37A 740E je 0043C38A

赶紧去输入注册码。CODE1=123456789
CODE2=1234568028

MY GOD！！！！真的是和我过不去吗？？？？居然注册失败，我倒，瘦弱的身躯再也不能支持这样的打

击了。呜呜呜呜呜呜。。。。。收工，不干了！（评语：丁丁虾有一颗脆弱的心）
（待续）

完成时间
2000.4.8 15:52

破解winhex v9.3（转载希望保持完整）-----下篇

级别：战国时期-----由于局势不稳定-------还是请前辈们指点一二
作者：丁丁虾 又名：DDXia [CCG]
目的：非常的天真无‘牙’------好象小虾米的牙真的看不见哦！：D（不以任何商业用途为目的）
赞助：WINICE.DAT----------非常非常的感谢看雪兄的礼品。看雪真得很乐于助人。

看一看上一回拦下来的代码：
:0043C340 A31C454500 mov dword ptr [0045451C], eax
:0043C345 8B879C000000 mov eax, dword ptr [edi+0000009C]-------->CODE1
:0043C34B 03C0 add eax, eax
:0043C34D 8D0480 lea eax, dword ptr [eax+4*eax]
:0043C350 058A000000 add eax, 0000008A
:0043C355 3B87A0000000 cmp eax, dword ptr [edi+000000A0]-------->CODE2
:0043C35B 0F940505434500 setz byte ptr [00454305]------>如果相等的话，设为1。
:0043C362 8D8770010000 lea eax, dword ptr [edi+00000170]
:0043C368 50 push eax
:0043C369 E83A86FCFF Call 004049A8
:0043C36E A304454500 mov dword ptr [00454504], eax
:0043C373 803D1343450000 cmp byte ptr [00454313], 00
:0043C37A 740E je 0043C38A
用BPM 454305 整个程序运行都没有用到。一定是作者有意设下的陷阱。

大家一定猜到了是：：：有另一处地方还存着CODE1和CODE2。
设断点；bpm 4521A4
bpm 4521A8
拦到了另一处代码：
:00425689 8B45FC mov eax, dword ptr [ebp-04]
:0042568C A3E0214500 mov dword ptr [004521E0], eax
:00425691 8B45F8 mov eax, dword ptr [ebp-08]
:00425694 A3E4214500 mov dword ptr [004521E4], eax

于是退出WINHEX程序
设断点；bpm 4521E0
bpm 4521E4

功夫不费有心人，拦截到如下代码：
:0044CFD7 A1E0214500 mov eax, dword ptr [004521E0]------->取CODE1
:0044CFDC E8FF0FFEFF call 0042DFE0------------------------------->计算出CODE2
:0044CFE1 3B05E4214500 cmp eax, dword ptr [004521E4]-------->与输入的CODE2比较。
:0044CFE7 751E jne 0044D007

CODE1=123456789算出的CODE2=0xFFFFFFFF=4294967295
还是没有注册成功。为什么呢？？？？
继续跟踪发现如下代码：

:0043C7F7 8D87E0000000 lea eax, dword ptr [edi+000000E0]------------->取CODE1
:0043C7FD 2B05BC434500 sub eax, dword ptr [004543BC]
:0043C803 8B00 mov eax, dword ptr [eax]
:0043C805 A3BC434500 mov dword ptr [004543BC], eax

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
:0043C80A 813DBC43450038900D00 cmp dword ptr [004543BC], 000D9038 ------>0xD9038=888888
:0043C814 7F21 jg 0043C837
:0043C816 813DBC43450035820000 cmp dword ptr [004543BC], 00008235-------->0x8235=33333
:0043C820 7C15 jl 0043C837
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以上四句是判断CODE1是否在 888888和33333之中。是对CODE1的限制。
:0043C822 A1BC434500 mov eax, dword ptr [004543BC]
:0043C827 B9E8030000 mov ecx, 000003E8
:0043C82C 99 cdq
:0043C82D F7F9 idiv ecx
:0043C82F 81FA47020000 cmp edx, 00000247
:0043C835 7507 jne 0043C83E
:0043C837 C6052443450000 mov byte ptr [00454324], 00----------->设置标志位

实际上CODE1用888888；844444；800000：755555：653421；500000；还是注册不了！看来还是有其他的判断程序，有兴趣的可以继续跟踪。
于是用了一个CODE1=321321
拦截:0044CFE1 3B05E4214500 cmp eax, dword ptr [004521E4]
得到：CODE2=0x9F2DC=621996

完成时间
2000.4.8 16:52


winhex9.4

 序 号:1882
标 题:谁有winhex9.4的注册码？ (16字)
发信人:isno
时 间:2000-6-23 15:30:49
阅读次数:18
详细信息:

或者谁能破了它？

标 题:试试这个注册码： (45字)
发信人:china2000
时 间:2000-6-23 15:45:41
阅读次数:46
详细信息:

试试这个注册码：
CODE1：78907
CODE2：580966

标 题:我在SMTH以前发过一篇，请进 (2千字)
发信人:shizg
时 间:2000-6-23 23:57:38
阅读次数:75
详细信息:

发信人: shizg (刀客☆永远的痛), 信区: Hacker
标 题: Winhex的破解，大家感兴趣么？新版本也不怕哟
发信站: BBS 水木清华站 (Fri Jun 9 09:47:56 2000)

winhex这个编辑器功能很强大，可以改ram。当初出来新版本而老注册号不能用时，
只好自己解决。好像从9.1*版本到现在的9.41，我都是这么做的，连跟踪都不用做，
找特征串，几分钟就搞定。有了注册码，不知大家还感不感兴趣，还是贴出来，
供参考。遇到新版本也可以试试。
要求：W32dasm，任意16进制编辑器，呵呵，比如老版本的winhex:)

下面以V9.25版为例，关键代码如下：
:00448611 mov dword ptr [2*edi+0044B8A6], eax
:00448618 jmp WINHEX.00448680
:0044861A mov eax, dword ptr [0044D180]
:0044861F call WINHEX.0042C608
:00448624 cmp eax, dword ptr [0044D184]
1 :0044862A jne 0044864A ->*******此处让它跳到0044864E，即不用做下面的比较
16进制751E改为EB22。4E-2C=22为跳的长度

:0044862C cmp byte ptr [0044E95D], 00
2 :00448633 jne 0044864E ->*******就是上面要改的地址
:00448635 mov al, 03
:00448637 call WINHEX.0040B5AC
:0044863C not ax
:0044863F movzx eax, ax
:00448642 cmp eax, dword ptr [0044D15C]
:00448648 je 0044864E
:0044864A xor eax, eax
:0044864C jmp WINHEX.00448650
3 :0044864E mov al, 01 ->********跳到这里，要赋值了
4 :00448650 mov byte ptr [0044EE8B], al ->****记下0044EE8B，它就是整个程序
判断的特征地址。如为1表示注册过，因此将程
序中所有mov byte ptr [0044EE8B], 00都让它
赋1

例如：
:00438111 call WINHEX.004049F8
:00438116 mov dword ptr [0044FCD4], eax
:0043811B call WINHEX.0043679C
:00438120 cmp byte ptr [edi+0000189F], 00
:00438127 je 00438130
:00438129 mov byte ptr [0044EE8B], 00 ***一个需要改的地方
:00438130 push 00000000
:00438132 mov eax, dword ptr [0044B00C]

上面是代码，拿到一个新版本，先用w32dasm反编译，然后：
1。搜索特征串mov dword ptr [2*edi+
只有一个，找到下面的jne处，改为强制跳转，例如改为jmp 0044864e，
跳转长度16进制一减就可以。
2。看0044864e处将al=1赋值给什么地址，如0044ee8b，记下
3。查找所有赋0语句，例如mov byte ptr [0044EE8B], 00
很快找到一个，记下其16进制机器码，例如c6058bee440000，就不用找了。
全部将其替换为c6058bee440001
4。随便一个16进制编辑器，修改即可。

标 题:实际上在cfg里面存有code和使用次数。我最初也用这方法，但无新版本code，只好用前面的方法。从9.1开始我都... (363字)
发信人:shizg
时 间:2000-6-24 8:37:09
阅读次数:40
详细信息:

标题: 实际上在cfg里面存有code和使用次数。我最初也用这方法，但无新版本code，只好用前面的方法。从9.1开始我都这么干的：）

内容:
这是我最早跟9.04版时，发现cfg文件的
: 0x90开始是winhex运行的次数.
: 0xa8开始是输入的两个code的二进制,例如8.85版本的就是:
: 81030100160e08
: 0x10381就是66433,0x80e16就是527894

BTW:这里可真是一个好地方，我也是一只菜鸟，多请教:)

标 题:试试这个注册码：cdoe1－111184，code2－785826 (3千字)
发信人:dr0
时 间:2000-6-24 10:34:15
阅读次数:66
详细信息:

http://www.winhex.com

输入注册码之后关闭该程序，然后用bpx GetVolumeInformationA设断点，
等中断下来后按两次F12，看见如下的判断：

0167:0044E150 MOV AL,03
0167:0044E152 CALL 0040BEF8 //这里头调用GetVolumeInformationA
0167:0044E157 NOT AX
0167:0044E15A MOVZX EAX,AX
0167:0044E15D CMP EAX,[0045321C]
0167:0044E163 JNZ 0044E186
0167:0044E165 MOV EAX,00453258
0167:0044E16A SUB EAX,08
0167:0044E16D SUB EAX,10
0167:0044E170 MOV EAX,[EAX] //取出code1
0167:0044E172 CALL 0042E9E0 //检查code1，并计算code2
0167:0044E177 MOV EDX,00453258
0167:0044E17C SUB EDX,04
0167:0044E17F SUB EDX,10
0167:0044E182 CMP EAX,[EDX] //比较真假code2
0167:0044E184 JZ 0044E18A
0167:0044E186 XOR EAX,EAX //bad flag
0167:0044E188 JMP 0044E18C
0167:0044E18A MOV AL,01 //good flag
0167:0044E18C MOV EDX,00455384
0167:0044E191 INC EDX
0167:0044E192 MOV [EDX],AL //set a flag
0167:0044E194 JMP 0044E1DD

上面的CALL 0042E9E0中会检查code1的合法性，如果合法则返回计算出来的code2，否则返回-1。
对code1的检查是比较麻烦的，如果有兴趣可以跟踪一下，大致上是这样的：求code1的平方，并将该平方值转换为字符串，
再将串的首字符和尾字符去掉，得到一个新串，再将新串转换成整数，然后再进行其它处理。
MOV [EDX], AL这条指令会设一个标志，用BPM EDX设断点监视此标志，很快看见如下的判断，是用来检查code1的：

0167:0043D279 CMP BYTE PTR [00455385],00
0167:0043D280 JNZ 0043D29F
0167:0043D282 CMP DWORD PTR [EDI+00000088],02
0167:0043D289 JLE 0043D29F
0167:0043D28B PUSH 00
0167:0043D28D PUSH 000DBBA0
0167:0043D292 PUSH 02
0167:0043D294 MOV EAX,[004562B0]
0167:0043D299 PUSH EAX
0167:0043D29A CALL USER32!SetTimer
0167:0043D29F LEA EAX,[EDI+000000E0]
0167:0043D2A5 SUB EAX,08
0167:0043D2A8 MOV EAX,[EAX] //取出code1
0167:0043D2AA MOV [00455424],EAX
0167:0043D2AF CMP DWORD PTR [00455424],000D9038
0167:0043D2B9 JG 0043D31C
0167:0043D2BB CMP DWORD PTR [00455424],00008235
0167:0043D2C5 JL 0043D31C
0167:0043D2C7 MOV EAX,[00455424]
0167:0043D2CC MOV EBX,000003E8
0167:0043D2D1 CDQ
0167:0043D2D2 IDIV EBX
0167:0043D2D4 CMP EDX,00000247
0167:0043D2DA JZ 0043D31C
0167:0043D2DC MOV EAX,[00455424]
0167:0043D2E1 MOV EBX,000003E8
0167:0043D2E6 CDQ
0167:0043D2E7 IDIV EBX
0167:0043D2E9 CMP EDX,00000315
0167:0043D2EF JZ 0043D31C
0167:0043D2F1 MOV EAX,[00455424]
0167:0043D2F6 MOV EBX,000003E8
0167:0043D2FB CDQ
0167:0043D2FC IDIV EBX
0167:0043D2FE CMP EDX,7B
0167:0043D301 JZ 0043D31C
0167:0043D303 MOV EAX,[00455424]
0167:0043D308 MOV ECX,00000064
0167:0043D30D CDQ
0167:0043D30E IDIV ECX
0167:0043D310 MOV ECX,EDX
0167:0043D312 CMP ECX,07
0167:0043D315 JZ 0043D327
0167:0043D317 CMP ECX,54
0167:0043D31A JZ 0043D327
0167:0043D31C MOV EAX,004553A0
0167:0043D321 SUB EAX,1B
0167:0043D324 MOV BYTE PTR [EAX],00 //bad guy!
0167:0043D327 XOR EAX,EAX

根据上面的代码可知code1还要满足如下几个条件：
1、code1取值范围为[0x8235，0xD9038]；
2、code1除以1000的余数不能等于0x247或者0x315或者0x7B；
3、code1除以100的余数必须为7或者0x54。

经过几次试探就可以找到合适的code1，继而得到对应的code2。
code1： 111184
code2： 785826

dr0/China


WinOKE

 标 题:初学者(13) (2千字)
发信人:liutong
时 间:2000-6-9 22:43:23
详细信息:
软件来源:软件世界2000年2A
软件用途:
WinOKE was created because I saw a need for a simple cheap way to do a Karaoke, but without the expense or hassle of getting in the big Karaoke machines. Why not set-up and run a karaoke from your home computer, a system where you could put any text into the program in time to the music would be great. Well here it is, WinOKE, and it's great!

注册时需要输入以下内容(所有的内容都将用于计算注册码)
Customer Code
Name
Adress 1
Adress 2
Adress 3
Adress 4
Post/Zip Code
Country
Unlocking Code

设中断bpx hmemcpy,点"注册"键
按F12若干次可找到
CALL 0047FC30
MOV EAX,[00490EA4]
CMP BYTE PTR [EAX],00 <----注册与否标志
JZ 0047539C <-----错误由此跳转
追进0047FC30,找到
CALL 00403F74
JZ 0047FE6E
XOR EAX,EAX
JMP 0047FE70
0047FE6E MOV AL,01
MOV [0049294B],AL
0047FE70 XOR EAX,EAX
因此只需将JMP改为90 90即可使此软件变为freeware

以下是追踪注册码生成的过程:
设中断bpx hmemcpy,点"注册"键
按F12待返回到WinOKE程序后,按F10可找到两个CALL
CALL 00403F74 <----检测Customer Code
JNZ 0047FE6A

CALL 00403F74 <----检测Unlocking Code
JZ 0047FE6E
Customer Code的生成过程:
Customer Code共6位,前4位用户输入,后2位由前4位生成
Unlocking Code的生成过程:
Unlocking Code共11位,前3位是固定的"OKE"
第4-9位由用户输入项计算生成
最后两位则有前面的9位计算生成

举例说明:
Customer Code: 0003**
Name: LiuTong
Adress 1: HePing
Adress 2:
Adress 3:
Adress 4:
Post/Zip Code: 100028
Country: China
Unlocking Code: ***********

Customer Code的计算:
0 0 0 3
ASCII码 30 30 30 33
系数 2 3 4 1
乘积 60 90 c0 33
将乘积相加得1E3
Customer Code中的第一个*的代码是3
将1E3右移3位得3C
Customer Code中的第二个*的代码是C
从软件中的代码表中查到
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
B R F G D C H K L M E N S P A Z
故Customer Code应为0003GS

Unlocking Code的计算:
第1-3位是固定的:OKE
第4和9位是根据输入数据的长度计算出来的:
软件将输入的数据整理变为:
">0003GS|LIUTONG|HEPING||||100028|CHINA<"
长度为(HEX)27
第4位的代码是2,查代码得"F"
第9位的代码是7,查代码得"K"
第5-8位由用户输入项计算出来
将">0003GS|LIUTONG|HEPING||||100028|CHINA<"同Customer Code的计算过程
得325D,则第5-8位的代码是GFCP
整理第1-9位是OKEFGFCPK
O K E F G F C P K
ASCII码 4F 4B 45 46 47 46 43 50 4B
系数 2 3 4 1 2 3 4 1 2
乘积 9E E1 114 46 8E D2 10C 50 96
将乘积相加得62B
第10位代码是B,查代码得"N"
将62B右移3位得C5
第11位代码是5,查代码得"C"
整理Unlocking Code是OKEFGFCPKNC

Customer Code: 0003GS
Name: LiuTong
Adress 1: HePing
Adress 2:
Adress 3:
Adress 4:
Post/Zip Code: 100028
Country: China
Unlocking Code: OKEFGFCPKNC


xara 3d4 4.0

 标 题:破解xara 3d4 4.0 (393字)
发信人:十三少
时 间:2000-6-14 23:53:09
详细信息:
程序下载：
http://www.newhua.com.cn/down/xara3d4n.exe
一个作3D动力图像的东西!!有网友要求破的^_^

*****方法如下：

一、去掉nag： 查找x3d.exe中3BC77452F6462410 (bpx 00458572 处设断)
----75----------
二、去掉时间：查找x3d.exe中84C00F848B0000006A68 (bpx 00425688 处设断)
------85------------
总结一下：只用改两个字节!^_^

标 题:trick (835字)
发信人:郭大志
时 间:2000-6-15 10:39:10
详细信息:

你作的是个quick crack，是最省事的办法。

用RegMon看一下，发现它启动的时候试图读如下的键：
HKEY_CURRENT_USER\Software\Xara\X3D4\Install\Key。
伪造该键，用bpx RegQueryValueExA do "d *(esp+8)"设断点，
跟踪它启动的过程，发现它是用如下的几个键来生成Key的，如此
可以写出注册机。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RegisteredOrganization
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RegisteredOwner
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\FirstInstallDateTime

也就是说，它是不会记住unlock code的，启动的时候根本不判断unlock code，
只是在输入unlock code之后对unlock code判断一下， 然后生成Key。只要把它生成Key的代码拷贝下来就成注册机了。

象这样的软件还碰到过不少，即启动的时候不判unlock code，而是判断另外的东西。比如Oska Deskmate（一个在桌面上跑来跑去的小熊）等。


Zappee 2.01

 标 题:初学者(14) (5千字)
发信人:liutong
时 间:2000-6-10 20:02:37
详细信息:
软件名称： Zappee
软件版本： 2.01
软件大小： 2507KB
软件授权： 共享软件
使用平台： Win95/98/NT
发布公司： http://www.zappee.com/
软件简介： 是一套“All-in-One”的MP3软件，也就是集成了CD播放、WAV播放、MP3播放、抓取光碟音轨、MP3编码、MP3解码、ID3Tag编辑、播放清单建立等功能。

设断点bpx hmemcpy,程序被中断后按F12键12次(第13次出错)
按F10追,很快便可找到你的注册码
下面介绍注册码生成过程:

软件内部有四组数据,如下:
第一组数据: 6 n 5 2 2 m 0 4 l 4 1 6
相应ASCII: 36 6E 35 32 32 6D 30 34 6C 34 31 36

第二组数据: K 9 6 w 6 9 7 o 4 7 k 7
相应ASCII: 4B 39 36 77 36 39 37 6F 34 37 6B 37

第三组数据: i 1 N 7 5 g 2 6 o 1 3 H
相应ASCII: 69 31 4E 37 35 67 32 36 6F 31 33 48

序号: 0 1 2 3 4 5 6 7 8 9 A B C D E F
第四组数据: 3 F Z e A g 2 D b H 4 c C 9 y 8
C J X a d k V z E L 1 Y f m P x
5 N u W h o T v I 0 s 7 j q R z
K d S M r 6 Q O p W

注册时需要输入用户名,@地址,注册码
当用户名和@地址不足12位时,分别用第一,二组数据补足
例:
用户名为LiuTong
补足后为LiuTong6n522

然后将补足12位的用户名和@地址按下面的算法改头换面(得到另外的两组数).
* Referenced by a CALL at Addresses:
|:00414A87 , :00414AE6 , :00414B6F , :00414C0B , :00414C68
|:00414CF4
|
:00414DC0 0FBE4C2404 movsx ecx, byte ptr [esp+04]
:00414DC5 8BC1 mov eax, ecx
:00414DC7 83E10F and ecx, 0000000F
:00414DCA C1F804 sar eax, 04
:00414DCD 83E00F and eax, 0000000F
:00414DD0 8BD0 mov edx, eax
:00414DD2 D1FA sar edx, 1
:00414DD4 A801 test al, 01
:00414DD6 7403 je 00414DDB
:00414DD8 83CA08 or edx, 00000008

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00414DD6(C)
|
:00414DDB 8BC1 mov eax, ecx
:00414DDD D1F8 sar eax, 1
:00414DDF F6C101 test cl, 01
:00414DE2 7402 je 00414DE6
:00414DE4 0C08 or al, 08

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00414DE2(C)
|
:00414DE6 240F and al, 0F
:00414DE8 C0E204 shl dl, 04
:00414DEB 0AC2 or al, dl
:00414DED C20400 ret 0004

根据上面计算得到的数据和第三组数据相加,除以39(程序在下面),余数是
注册码在第四组数据中的序号

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041443C(C)
|
:004143F9 0FBE440C48 movsx eax, byte ptr [esp+ecx+48]
:004143FE 8B948CC8000000 mov edx, dword ptr [esp+4*ecx+000000C8]
:00414405 8BAC8CF8000000 mov ebp, dword ptr [esp+4*ecx+000000F8]
:0041440C 03C2 add eax, edx
:0041440E 8BB42494000000 mov esi, dword ptr [esp+00000094]
:00414415 03C5 add eax, ebp
:00414417 8D1440 lea edx, dword ptr [eax+2*eax]
:0041441A C1E202 shl edx, 02
:0041441D 2BD1 sub edx, ecx
:0041441F 03F2 add esi, edx
:00414421 89B42494000000 mov dword ptr [esp+00000094], esi
:00414428 BE39000000 mov esi, 00000039
:0041442D 99 cdq
:0041442E F7FE idiv esi
:00414430 41 inc ecx
:00414431 83F90C cmp ecx, 0000000C
:00414434 8A441458 mov al, byte ptr [esp+edx+58]<----查到注册码
:00414438 88440C0F mov byte ptr [esp+ecx+0F], al
:0041443C 7CBB jl 004143F9 <----12位未计算完返回
:0041443E 8B842494000000 mov eax, dword ptr [esp+00000094]
:00414445 8BCE mov ecx, esi
:00414447 99 cdq
:00414448 F7F9 idiv ecx
:0041444A 33C0 xor eax, eax
:0041444C 8D7C2410 lea edi, dword ptr [esp+10]
:00414450 C644241D00 mov [esp+1D], 00
:00414455 8A541458 mov dl, byte ptr [esp+edx+58]
:00414459 8854241C mov byte ptr [esp+1C], dl
:0041445D 8B942434010000 mov edx, dword ptr [esp+00000134]
:00414464 8BCA mov ecx, edx
:00414466 8901 mov dword ptr [ecx], eax
:00414468 894104 mov dword ptr [ecx+04], eax
:0041446B 894108 mov dword ptr [ecx+08], eax
:0041446E 6689410C mov word ptr [ecx+0C], ax
:00414472 83C9FF or ecx, FFFFFFFF
:00414475 F2 repnz
:00414476 AE scasb
:00414477 F7D1 not ecx
:00414479 2BF9 sub edi, ecx
:0041447B 8BC1 mov eax, ecx
:0041447D 8BF7 mov esi, edi
:0041447F 8BFA mov edi, edx
:00414481 C1E902 shr ecx, 02
:00414484 F3 repz
:00414485 A5 movsd
:00414486 8BC8 mov ecx, eax
:00414488 83E103 and ecx, 00000003
:0041448B F3 repz
:0041448C A4 movsb
:0041448D 5F pop edi
:0041448E 5E pop esi
:0041448F 5D pop ebp
:00414490 5B pop ebx
:00414491 81C418010000 add esp, 00000118
:00414497 C20C00 ret 000C

整理
用户名:LiuTong
@地址:a@b.c
注册码:fY3iZ5oWcovZ2


超级电话通 3.05

 标 题:初学者(12) (1千字)
发信人:liutong
时 间:2000-6-9 22:42:26
详细信息:
超级电话通 版本 V3.05 共享版 SCBOOK V3.05

1.软件简介
超级电话通 软件是Win95&Win98&WinNT下的电子个人通讯录,它可方便的
记录管理您朋友的电话号码,BP号码,电子邮件地址,通讯地址等10多项内容.
支持自动拨号,连接个人主页,发送电子邮件,界面友好华丽,功能全面,另附
有全国的区号邮编查询等.

软件不用附带任何DLL,OCX等,不用任何数据库引擎支持,速度快,软件容量
小.

1.注册版(完整版):可以使用软件的全部功能,可以保存的记录数不受限制,并享有技术支
持及升级服务.注册版软件的使用权归注册人所有,不得任意传播.

2.共享版[SHAREWARE]:此版软件是供广大中国电脑爱好者免费使用的版本,并可无限制的
传播复制,但不能进行赢利性的销售或进行非法修改反汇编.共享版具有本软件的全部功能,
但可保存的记录数限制在50个以内，当记录数目达到30个以上时向您提示。

软件来源:软件世界2000年6A

注册码计算比较简单:
将用户名字母的ASCII码乘以序号,相加后去减BEAE0,再转换为十进制即是注册码
例:
用户名: K i l l e r
ASCII: 4B 69 6C 6C 65 72
序号: 1 2 3 4 5 6
乘积: 4B D2 144 1B0 1F9 2AC
和: 8B6
BEAE0-8B6=BE22A
转换为十进制: 778794

整理:
用户名: Killer
注册码: 778794


呼吸小秘

 标 题:初学者请进（一篇破解javagirl的心得） (2千字)
发信人:十三少
时 间:2000-5-9 23:39:50
详细信息:
=====呼吸小秘（javegirl）的破解过程。
软件介绍：这是一个做主页特效的小软件。软件不注册有功能限制，
感觉其注册检测部分同人物生物节律有点相像，不提示出错信息！
======这个软件用aspack1.06版压过，我用prodump脱的壳！
软件将注册信息写入注册表
HKEY_USER / SOFTWARE/ BREATHSOFT/ 注册/ javagirl下 ，
每次启动时都做比较。注册码与注册名无关，但必须是13位，而且只
要前8位是BSJG08SN，后5位就可以任意啦！
======破解过程：
1、trw2000载入脱壳后的javagirl.exe
2、填写注册信息，name:yubing
code:78787878
&我第一次追时按习惯只输入了8位的注册码，后来发现不对，又改为13位，
请注意听，我会慢慢地分析:-)
3、下ctrl-d，进入trw，下
:bpx hmemcpy
:g
4、按“注册键”，程序立即被拦，下指令
:bc *
:pmodule
5、按F10，只到如下程式：
0167:0049A329 MOV EAX,[EBP-04] &下　d eax 可看到你输入的注　　　　　　　　　　　　　　　　　　　　 册码78787878
0167:0049A32C CALL 00403C00
0167:0049A331 CMP EAX,BYTE+0D &此时eax中为注册码个数(8个), 是否为13位。
JNZ NEAR 0049A4AF &如果不相等，则出错。
LEA EAX,[EBP-04]
PUSH EAX
。。。。。。。

0167:0049A36C MOV EAX,[EAX+0508]
0167:0049A372 CALL 0043BAA8
0167:0049A377 MOV EDX,[EBP-08] &下d edx 可见到注册码　　　　　　　　　　　　　　　　　　　　　　　　BSJG08SN
POP 　EAX &下d eax 可见到输入注册码的前8位。
                CALL　00403D10　&比较注册码的核心哟，f8追入！
                JNZ NEAR 0049A4AF &不相等则出错。
            。。。。。。。。

6、看注册码比较的部分call 00403D10
0167:00403D10 PUSH EBX
PUSH ESI
PUSH EDI
MOV ESI,EAX　　　　　　&下 d eax为你输入的注册码
MOV EDI,EDX &下 d edx为正确的注册码
CMP EAX,EDX &比较注册码.
0167:00403d19 JZ NEAR 00403DAE &相等，则跳转哟，一定要跳哟。
...................(略)
7、至此程序追踪完成，由于注册码必须是13位，所以我们前8位输入BSJG08SN
之后，还必须要任意填5位。

                   cracker：十三少
                          scyb@sina.com
                          http://scyb.yeah.net


护花使者

 标 题:献给孩子们“六一”节的礼物 (2千字)
发信人:小楼
时 间:2000-5-31 20:57:29
详细信息:
献给孩子们“六一”节的礼物
----如何得到 护花使者 注册码

护花使者是一个反黄软件，该软件名字的含义是：象爱护花朵一样保护未成年人，使其不受黄毒的侵害。

功能简介
1. 文字消毒
护花使者可以对屏幕上出现的文字进行过滤，如果遇到色情描写，护花使者将自动辨别，并用黄颜色的X符号覆盖掉色情描写的文字，使之不在屏幕上出现。
2. 图象审查
现有的科技水平，尚不能由计算机自动识别出色情图象，所以护花使者自动每隔5分钟，对屏幕上的图象画面进行拍照保存，以供监护者（人工）进行审查。

共享方式
护花使者是一个国产的共享软件，欢迎自由免费传播，拷贝，上载，下载，试用，试用期30天。如在超期后继续使用，请和作者联系注册。注册的用户可以继续使用，并享受免费升级服务，但不能退还注册费。

这个软件可以在 http://www.cnshare.com 下载，约270K。

首先用fileinfo 2.20发现它用aspack1.07压缩。当然就可以用procdump来解压啦,即dump.exe。解压后用mype改characties值，使得w32dasm可以反汇编（感谢KEN）。
运行iflower.exe，注册一下，当然得到“注册码不对，请您重新输入”的告示。
用ultraedit打开dump.exe，查找上述字句，改为qqqqq，你还可以找到“注册成功，谢谢您使用护花使者! ”，将之改为aaaaa，这样你就可以用w32dasm反汇编了。
在string data reference中找到
* Possible StringData Ref from Code Obj ->"aaaaaaa" <--注册成功
|
:0044D166 BA14D24400 mov edx, 0044D214
:0044D16B 8BC6 mov eax, esi
:0044D16D E8CEF6FCFF call 0041C840
:0044D172 6A00 push 00000000
:0044D174 668B0D2CD24400 mov cx, word ptr [0044D22C]
:0044D17B B204 mov dl, 04
:0044D17D B838D24400 mov eax, 0044D238
:0044D182 E865C2FFFF call 004493EC
:0044D187 8BC6 mov eax, esi
:0044D189 E8BAD6FDFF call 0042A848
:0044D18E EB15 jmp 0044D1A5

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044D102(C)
|
:0044D190 6A00 push 00000000
:0044D192 668B0D2CD24400 mov cx, word ptr [0044D22C]
:0044D199 B204 mov dl, 04

* Possible StringData Ref from Code Obj ->"qqqqqqqqq" <--注册失败
|
:0044D19B B860D24400 mov eax, 0044D260
:0044D1A0 E847C2FFFF call 004493EC

向上看看哪里可以跳过去？你会见到
:0044D0FC 58 pop eax
:0044D0FD E8026AFBFF call 00403B04
:0044D102 0F8588000000 jne 0044D190 <--跳就失败

所以用trw2000下断点
bpx 44D0FC
g

当被拦下后，你可以左看看，右看看，总之是多看看
d eax
d ebx
d ecx
......
......
最后祝大家“六一”节快乐！


批量文件设置器 2.05

 标 题:如何计算 批量文件设置器 2.05 的注册码 (6千字)
发信人:sunwk（小楼）
时 间:2000-4-24 21:03:54
详细信息:
如何计算 批量文件设置器 2.05 的注册码

作者主页 http://glowing.yeah.net/

上次得冰毒大侠帮助，破了那个renameman，但有时那个软件会拒绝工作。忍无可忍情况下，我delete it，近日用上了国人的产品 批量文件设置器 2.05。
这个软件是用aspack 1.083压缩的，这次不高兴去用解压加暴力破解的方法，我来试试找出注册码的计算方法。
随便填入用户名：sunwk
公司名：sunwk
注册码：213546

trw中下命令：
bpx:hmemcpy
g

回到目标程序中，按下“现在注册”按钮，见trw跳出。
bd，中断断点。F12按14下（按15下，注册失败的窗户就跳出来了），改按F10一直走。
以下为了解说的方便，定义一些缩略语，并都是16进制表示。u1：用户名第一个字母。u2：用户名第二个字母。c1：公司名第一个字母。c2：公司名第二个字母。s指注册码，3位数字为一组，共8组，依次为s1、s2、s3、s4、s5、s6、s7、s8。

:004AA386 8B45C0 mov eax, dword ptr [ebp-40]
:004AA389 0FB64001 movzx eax, byte ptr [eax+01] <--eax=c2,ebx=u2.
:004AA38D 03D8 add ebx, eax <--ebx=c2+u2
:004AA38F 0FB707 movzx eax, word ptr [edi] <--eax=s1
:004AA392 3BD8 cmp ebx, eax <--s1=c2+u2 ?
:004AA394 0F8502010000 jne 004AA49C <--no,then end.
:004AA39A 8D55BC lea edx, dword ptr [ebp-44]
:004AA39D 8B45FC mov eax, dword ptr [ebp-04]
:004AA3A0 8B80DC020000 mov eax, dword ptr [eax+000002DC]
:004AA3A6 E86188F8FF call 00432C0C
:004AA3AB 8B45BC mov eax, dword ptr [ebp-44]
:004AA3AE 33DB xor ebx, ebx
:004AA3B0 8A18 mov bl, byte ptr [eax]
:004AA3B2 8D55B8 lea edx, dword ptr [ebp-48]
:004AA3B5 8B45FC mov eax, dword ptr [ebp-04]
:004AA3B8 8B80E0020000 mov eax, dword ptr [eax+000002E0]
:004AA3BE E84988F8FF call 00432C0C
:004AA3C3 8B45B8 mov eax, dword ptr [ebp-48]
:004AA3C6 0FB600 movzx eax, byte ptr [eax] <--eax=c1,ebx=u1
:004AA3C9 03D8 add ebx, eax <--ebx=c1+u1
:004AA3CB 0FB74702 movzx eax, word ptr [edi+02] <--ebx=s2
:004AA3CF 3BD8 cmp ebx, eax <--s2=c1+u1 ?
:004AA3D1 0F85C5000000 jne 004AA49C
:004AA3D7 8D55B4 lea edx, dword ptr [ebp-4C]
:004AA3DA 8B45FC mov eax, dword ptr [ebp-04]
:004AA3DD 8B80DC020000 mov eax, dword ptr [eax+000002DC]
:004AA3E3 E82488F8FF call 00432C0C
:004AA3E8 8B45B4 mov eax, dword ptr [ebp-4C]
:004AA3EB 33DB xor ebx, ebx
:004AA3ED 8A18 mov bl, byte ptr [eax]
:004AA3EF 8D55B0 lea edx, dword ptr [ebp-50]
:004AA3F2 8B45FC mov eax, dword ptr [ebp-04]
:004AA3F5 8B80DC020000 mov eax, dword ptr [eax+000002DC]
:004AA3FB E80C88F8FF call 00432C0C
:004AA400 8B45B0 mov eax, dword ptr [ebp-50]
:004AA403 0FB64001 movzx eax, byte ptr [eax+01]
:004AA407 03D8 add ebx, eax
:004AA409 0FB74704 movzx eax, word ptr [edi+04]
:004AA40D 3BD8 cmp ebx, eax <--s3=u1+u2 ?
:004AA40F 0F8587000000 jne 004AA49C
:004AA415 8D55AC lea edx, dword ptr [ebp-54]
:004AA418 8B45FC mov eax, dword ptr [ebp-04]
:004AA41B 8B80E0020000 mov eax, dword ptr [eax+000002E0]
:004AA421 E8E687F8FF call 00432C0C
:004AA426 8B45AC mov eax, dword ptr [ebp-54]
:004AA429 33DB xor ebx, ebx
:004AA42B 8A18 mov bl, byte ptr [eax]
:004AA42D 8D55A8 lea edx, dword ptr [ebp-58]
:004AA430 8B45FC mov eax, dword ptr [ebp-04]
:004AA433 8B80E0020000 mov eax, dword ptr [eax+000002E0]
:004AA439 E8CE87F8FF call 00432C0C
:004AA43E 8B45A8 mov eax, dword ptr [ebp-58]
:004AA441 0FB64001 movzx eax, byte ptr [eax+01]
:004AA445 03D8 add ebx, eax
:004AA447 0FB74706 movzx eax, word ptr [edi+06]
:004AA44B 3BD8 cmp ebx, eax <--s4=c1+c2 ?
:004AA44D 754D jne 004AA49C
:004AA44F 0FB707 movzx eax, word ptr [edi]
:004AA452 0FB75702 movzx edx, word ptr [edi+02]
:004AA456 03C2 add eax, edx
:004AA458 0FB75704 movzx edx, word ptr [edi+04]
:004AA45C 03C2 add eax, edx
:004AA45E 0FB75706 movzx edx, word ptr [edi+06]
:004AA462 03C2 add eax, edx
:004AA464 0FB75708 movzx edx, word ptr [edi+08]
:004AA468 0FB74F0A movzx ecx, word ptr [edi+0A]
:004AA46C 03D1 add edx, ecx
:004AA46E 0FB74F0C movzx ecx, word ptr [edi+0C]
:004AA472 03D1 add edx, ecx
:004AA474 0FB74F0E movzx ecx, word ptr [edi+0E]
:004AA478 03D1 add edx, ecx
:004AA47A 3BC2 cmp eax, edx <-- s1+s2+s3+s4 == s5+s6+s7+s8 ?
:004AA47C 751E jne 004AA49C
:004AA47E 663B7708 cmp si, word ptr [edi+08]
:004AA482 7518 jne 004AA49C <-- 这里好像是比较所有输入的字母或
数字的个数是否等于s5(中文算2个
。我此处的si＝2f)
:004AA484 0FB74708 movzx eax, word ptr [edi+08]
:004AA488 0FB717 movzx edx, word ptr [edi]
:004AA48B 03C2 add eax, edx
:004AA48D 0FB7570A movzx edx, word ptr [edi+0A]
:004AA491 3BC2 cmp eax, edx <--s1+s5 =s6 ?
:004AA493 7507 jne 004AA49C
:004AA495 66837F0C64 cmp word ptr [edi+0C], 0064 <--s7=64h ?
:004AA49A 743B je 004AA4D7 <--jump，成功！

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004AA394(C), :004AA3D1(C), :004AA40F(C), :004AA44D(C), :004AA47C(C)
|:004AA482(C), :004AA493(C)
|
:004AA49C 6A10 push 00000010
:004AA49E 684CA64A00 push 004AA64C
:004AA4A3 6888A64A00 push 004AA688
:004AA4A8 8B45FC mov eax, dword ptr [ebp-04]
:004AA4AB E870E9F8FF call 00438E20
:004AA4B0 50 push eax
:004AA4B1 E826CFF5FF call 004073DC

这样我们就可以推算出注册码的条件了。

u1=73h u2=75h
c1=73h c2=75h
s1 s2 s3 s4 s5 s6 s7 s8

u2 + c2 = s1 234
u1 + c1 = s2 230
u1 + u2 = s3 232
c1 + c2 = s4 232
s1 + s2 + s3 + s4 = s5 + s6 + s7 + s8
s1 + s5 = s6
s6 = 100
sum = s5 (当用户名只为一中文字时，sum＝1Ah）47

s1. 234
s2. 230
s3. 232
s4. 232
s5. 047
s6. 281
s7. 100
s8. 500

这样，我的
用户名：sunwk
公司名：sunwk
注册码：234230232232047281100500
end.


拼音加加2.0

 标 题:拼音加加2.0注册机，适用于2.01 (1千字)
发信人:guest
时 间:2000-6-4 21:58:56
详细信息:

 #include <windows.h>
#include <stdio.h>

const char REG_KEY_NAME[]= "Software\\Rovasoft";
const char REG_VALUE_NAME1[]= "BookID";
const char REG_VALUE_NAME2[]= "Key";

#define FAIL 0xFFFFFFFFL

#define MAX_LEN  32

void main(void)
{
HANDLE handle;
HKEY hKey;
long BookID, BookIDSize;
char Key[MAX_LEN];
char buf[MAX_LEN];
int k;
long ValueType;
char subtractor[16] =
{    0x2F,
0x2E,
0x2C,
0x2D,
0x2F,    //not sure
0x2D,
0x2F,    //not sure
0x2F,
0x2C,
0x2E,
0x2F,    //not sure
0x2F,    //not sure
0x2F,    //not sure
0x2F,    //not sure
0x2F,    //not sure
0x2F    //not sure
};

if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_NAME, NULL,
  NULL, NULL, KEY_ALL_ACCESS,
NULL, &hKey, NULL) != ERROR_SUCCESS)
{
printf("Error opening registry key \"%s\".\n",
  REG_KEY_NAME);
return;
}

BookIDSize = sizeof(BookID);
if (RegQueryValueEx(hKey, REG_VALUE_NAME1, NULL, (unsigned
  long *)&ValueType, (LPBYTE)&BookID,
(LPDWORD)&BookIDSize) != ERROR_SUCCESS)
{
printf("Error reading registry value \"%s\\%s\".\n",
  REG_KEY_NAME, REG_VALUE_NAME1);
RegCloseKey(hKey);
return;
}

if (BookID < 1000000000L)
{
BookID += 1000000000L;
}

sprintf(buf, "%010u", BookID);
lstrcat(buf, "000000");

for (k = 0; k < 16; k++)
{
Key[k] = ((buf[k] - subtractor[k]) % 10)
  + '0';
}

Key[16] = '\0';

if (RegSetValueEx(hKey, REG_VALUE_NAME2, NULL, REG_SZ , (CONST
  BYTE *)(&Key[0]),
lstrlen(Key) + 1) != ERROR_SUCCESS)
{
printf("Error writing registry value \"%s\\%s\".\n",
  REG_KEY_NAME, REG_VALUE_NAME2);
RegCloseKey(hKey);
return;
}

RegCloseKey(hKey);

printf("Successfully registered.\n");
}


侠客系统修改1.21

 标 题:初学者来吧！（一篇‘侠客系统修改1。21’的破解） (2千字)
发信人:十三少
时 间:2000-5-13 10:09:00
详细信息:
今天终于完成了《侠客系统修改1。21》的破解!
这个软件把注册信息写入在当前目录一个名为
sysset.cfg的文件中。这个软件的注册检验部
分比较有意思，它是把输入的注册码分别作比
较，一个不对便GAME OVER了，我费了好长时间
才找到的:)。注册码与用户名有关，用户名必须
是大于或等于3位，且注册码个数是用户名字符数
的2倍。比如用户名为3位，那么它的注册码就有
6位。
*****想知道如何破解的朋友，请注意听下去!
===========步骤与方法：========================
1、用trw载入sysset.exe
填写注册信息：用户名：123 (3位)
注册码：787878 (6位)
下断点：
:bpx getwindowtexta
:g
2、按确定，程序被拦，
:bc * &清除断点
:pmodule &回到程序领空
3、按F10追，到
0167:00424124 CALL 0042CAE0 &注册比较部分，以后要按F8追入!
0167:00424129 TEST EAX,EAX &注册标记，很多软件常用的保护手法!
0167:0042412B JZ NEAR 00424288 &为0，则去死!!
...............(略)

4、在CALL 0042CAE0处，按F8追入，按F10继续追，直到如下代码

0167:0042CC4C CMP [EAX+EDX],BL &此处分个比较注册码:)，在此处设断!
0167:0042CC4F JNZ 0042CC8B &不正确,则去死!，
0167:0042CC51 INC ESI
........(略)
5、最为关键的一步，
0167:0042CC4C CMP [EAX+EDX],BL
:bc * &清除以前断点，
按F9在此处设断点，
:g

6、程序被拦
0167：00424CC4C CMP [EAX+EDX],BL ，记下BL的值，
按F10执行一步，到了
0167:0042CC4F JNZ 0042CC8B !!!此时一定要修改标志(r fl z)，骗过
程序,使其继续比较下去，不然注册出错哟:)，如此循环6次，每次观察BL的
值，拿笔记下吧，这就是你要的东西!不过你记下的可只是ASCII码，需要
转换哟:)，(由于我们的用户名为3位，注册码有6位，所以要记6次)
6次BL的值分别为 64,31,59,65,66,31
转换为字符分别是d 1 Y e f 1
整理得注册信息：
Name : 123
RegCode :d1Yef1
****若不想求出注册码，只须将JNZ 0042CC8B nop掉即可!*****
7、以上完成了《侠客系统修改1。21》的破解，由于本人表达能力水平有
限，不知大家能不能看懂，若有错误之处，还望高手指点!

《以上破解欢迎转载，但不要修改其内容。现在是凌晨2点啦，呜呜，
我还在写破解文章，看来又要少活5年了，唉》

破解者：
十三少
scyb@sina.com
http://scyb.yeah.net
00.05.12
我的注册信息：Name:yubing
RegCode:d3W9q2Xx22Wv

你注册成功了吗？你知道程序是在哪里检验用户名的个数吗？
如有疑问，可mail 到我的信箱!


虚幻立体制作 1.0

 标 题:用W32DASM破解《虚幻立体制作》共享版 v1.0 (2千字)
发信人:DDXia
时 间:2000-2-21 12:50:46
阅读次数:35
详细信息:
用W32DASM破解《虚幻立体制作》共享版 v1.0 北京平易软件有限公司 （转载希望保持完整）
作者：丁丁虾 又名：DDXia

http://software.silversand.net:800/tools/graphics/3d/V3D10.zip
由于看了几篇tKC的大作，拿它来练练手。时间花了2个小时，应该算是入门水平的。

:00402B37 50 push eax
:00402B38 51 push ecx
:00402B39 C744242000000000 mov [esp+20], 00000000
:00402B41 E84F980000 call 0040C395
^^^^^^^^^^^^^----->进行注册码比较
:00402B46 83C408 add esp, 00000008
:00402B49 85C0 test eax, eax
:00402B4B 754D jne 00402B9A
^^^^^^^^^^^^^----->跳到注册失败的窗口
:00402B4D 57 push edi
:00402B4E B9DC334300 mov ecx, 004333DC
:00402B53 E8C0750100 call 0041A118
:00402B58 8B0DF0114300 mov ecx, dword ptr [004311F0]

其实用W32DASM解中文的软件，真是困难的，55555，全是乱码:(
有两种解法：
1。通用的就应该是 jne 00402B9A ---->je 00402B9A
2。在W32DASM中设call 0040C395断点，当它返回的时候就会有正确的注册码。
=====================================以下是显示注册失败的窗口
:00402B9A 6A6B push 0000006B
:00402B9C 8D4C240C lea ecx, dword ptr [esp+0C]
:00402BA0 E8F0C20100 call 0041EE95
:00402BA5 8B442408 mov eax, dword ptr [esp+08]
:00402BA9 6A00 push 00000000
:00402BAB 6A00 push 00000000
:00402BAD 50 push eax
:00402BAE E8B3EB0100 call 00421766

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402B98(U)
|
:00402BB3 8D4C2408 lea ecx, dword ptr [esp+08]
:00402BB7 C7442418FFFFFFFF mov [esp+18], FFFFFFFF
:00402BBF E81B740100 call 00419FDF
:00402BC4 8B4C2410 mov ecx, dword ptr [esp+10]
:00402BC8 5F pop edi
:00402BC9 64890D00000000 mov dword ptr fs:[00000000], ecx
:00402BD0 5E pop esi
:00402BD1 83C414 add esp, 00000014
:00402BD4 C3 ret

完成时间
2000.2.18 21:11:59
标 题:用TRW2000破解《虚幻立体制作》共享版 v1.0 (2千字)
发信人:DDXia
时 间:2000-2-27 12:35:10
阅读次数:460
详细信息:
最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。

用TRW2000破解《虚幻立体制作》共享版 v1.0 （转载希望保持完整）

级别：入门级-----前辈们就不要看了。
作者：丁丁虾 又名：DDXia [CCG]

http://software.silversand.net:800/tools/graphics/3d/V3D10.zip

在Sun Bird兄的一片诚心劝告下，于今天晚上9点，试用TRW2000进行破解。首先研究了一篇有关八爪鱼写的美萍安全卫士 V4.7 破解实战录，于是就有点儿蠢蠢欲动了。赶紧把以前破过的V3D（不好意思，又拿做实验）进行一翻实验，WHAT靠，用了以后把我吓一跳，功能真是COOL！
破解如下：
0、用TRW2000载入V3D.exe,run,调出注册框，填入 123456 （随便）
1、CTRL+N 激活TRW2000
2、BPX hmemcpy 设置中断
3、CTRL+N 回到程序，按确定。
4、TRW2000中断跳出-----停在-------KERNEL（1）+9E5F--------
5、BC * 清中断
6、PMODULE 回到程序代码中 。
7、按F10一直往下执行......
015F:00402B9A PUSH 0000006B
015F:00402B9C LEA ECX,[ESP+0C]
015F:00402BA0 CALL 0041EE95
015F:00402BA5 MOV EAX,[ESP+08]
015F:00402BA9 PUSH 00000000
015F:00402BAB PUSH 00000000
015F:00402BAD PUSH EAX
015F:00402BAE CALL 00421766
^^^^^^^^^^^^^^^^------>执行CALL，就会跳出注册失败的对话框。

然后回顾一下，往上走走看是否有比较语句。LET ME SEE！

015F:00402B23 MOV EAX,[00431244]
015F:00402B28 MOV [ESP+08],EAX
015F:00402B2C MOV EAX,[004333D8]
015F:00402B31 MOV ECX,[ESI+64]
015F:00402B34 LEA EDI,[ESI+64]
015F:00402B37 PUSH EAX
015F:00402B38 PUSH ECX
015F:00402B39 MOV DWord Ptr [ESP+20],00000000
015F:00402B41 CALL 0040C395
015F:00402B46 ADD ESP,00000008
015F:00402B49 TEST EAX,EAX
015F:00402B4B JNZ 00402B9A
^^^^^^^^^^^^^^^^------->在这里设一个断点，再注册一遍。
动态的改为 JZ 00402B9A---->即原代码75改为74
OK！初战告捷。

015F:00402B4D PUSH EDI
015F:00402B4E MOV ECX,004333DC
015F:00402B53 CALL 0041A118
015F:00402B58 MOV ECX,[004311F0]
015F:00402B5E PUSH ECX
015F:00402B5F PUSH ECX
015F:00402B60 MOV ECX,ESP
015F:00402B62 MOV [ESP+14],ESP
015F:00402B66 PUSH 004333DC
015F:00402B6B CALL 00419D54
015F:00402B70 CALL 00401FB0
015F:00402B75 ADD ESP,00000008
015F:00402B78 LEA ECX,[ESP+08]
015F:00402B7C PUSH 00000068
015F:00402B7E CALL 0041EE95
015F:00402B83 MOV EDX,[ESP+08]
015F:00402B87 PUSH 00000000
015F:00402B89 PUSH 00000000
015F:00402B8B PUSH EDX
015F:00402B8C CALL 00421766
015F:00402B91 MOV ECX,ESI
015F:00402B93 CALL 0041B9FA
015F:00402B98 JMP 00402BB3
015F:00402B9A PUSH 0000006B
015F:00402B9C LEA ECX,[ESP+0C]

完成时间
2000.2.25 12:30:00
耗时2小时外带熟悉TRW

标 题:用TRW2000读出《虚幻立体制作》共享版 v1.0 的注册码 (2千字)
发信人:DDXia
时 间:2000-3-4 11:13:17
详细信息:

最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。

用TRW2000读出《虚幻立体制作》共享版 v1.0 的注册码（转载希望保持完整）

级别：入门级+ -----前辈们请指导：）。
作者：丁丁虾 又名：DDXia [CCG]

http://software.silversand.net:800/tools/graphics/3d/V3D10.zip
有了前面对V3D（不好意思，又再拿做实验）的一番实验，功力增加一点。于是想试

自己的功力是否能嗅出来。哇，肚子饿了，用词一不当了，请原谅。
破解如下：
0、用TRW2000载入V3D.exe,run,调出注册框，填入 123456 （随便）
1、详细跟踪看上一节！

015F:00402B23 MOV EAX,[00431244]
015F:00402B28 MOV [ESP+08],EAX
015F:00402B2C MOV EAX,[004333D8]
015F:00402B31 MOV ECX,[ESI+64]
015F:00402B34 LEA EDI,[ESI+64]
015F:00402B37 PUSH EAX
015F:00402B38 PUSH ECX
015F:00402B39 MOV DWord Ptr [ESP+20],00000000
015F:00402B41 CALL 0040C395
015F:00402B46 ADD ESP,00000008
015F:00402B49 TEST EAX,EAX
015F:00402B4B JNZ 00402B9A
^^^^^^^^^^^^^^^^------->在这里是注册失败的转折
往上看CALL 0040C395---->一定是比较注册码的子程序。

按F8 TRACE IT

015F:0040C395 PUSH EBP
015F:0040C396 MOV EBP,ESP
015F:0040C398 CMP DWord Ptr[0043C95C],00000000
015F:0040C39F PUSH EBX
015F:0040C3A0 PUSH ESI
015F:0040C3A1 PUSH EDI
015F:0040C3A2 JNZ 0040C3B6
015F:0040C3A4 PUSH DWord Ptr [EBP+0C]
015F:0040C3A7 PUSH DWord Ptr [EBP+08]
015F:0040C3AA CALL 0040F260
015F:0040C3AF POP ECX
015F:0040C3B0 POP ECX
015F:0040C3B1 JMP 0040C43F
015F:0040C3B6 PUSH 00000019
015F:0040C3B8 CALL 0040ED4A

015F:0040C3BD MOV ESI,[EBP+0C]-----》

015F:0040C3C0 MOV EDI,[EBP+08]-----》

-----------------》执行完上两句后
desi：52345----真真正正原装注册码
dedi：123456---我填的注册码
口头谗：收工 ！！！！

015F:0040C3C3 POP ECX
015F:0040C3C4 MOVZX CX,Byte Ptr [EDI]
015F:0040C3C8 MOVZX EAX,CL
015F:0040C3CB INC EDI
015F:0040C3CC MOV [EBP+0C],ECX
015F:0040C3CF TEST Byte Ptr [EAX+00436A61],04
015F:0040C3D6 JZ 0040C3EE
完成时间
2000.2.26 01:30:00
耗时半小时带打击键盘


选号王一号 v1.5

 标 题:破解“选号王一号 v1.5 预览版” (3千字)
发信人:Sun Bird [CCG]
时 间:2000-6-26 17:19:29
详细信息:
破解“选号王一号 v1.5 预览版”

作者：Sun Bird [CCG]（中国人的破解团体 China Cracking Group）

工具：Trw2000 v1.22（中国人的骄傲，向刘涛涛、朱南灏大虾致敬！）

日期：2000年6月25日

特别感谢看雪大虾关于断点设置的指点^_^

软件简介：功能强大的电脑彩票智能分析及选号系统，可根据历史数据进行多种分析，并预测下期的中奖号码。

软件的注册信息存储在“HKEY_LOCAL_MACHINE\Software\LOTTERY”

破解这个软件有两个方法，都非常简单，下面听我慢慢道来：

第一种方法：

(1) 运行 Lottery，嘣－－版权画面后跳出注册窗口“注册……”

用户姓名
用户码 JIUW-DGLQ-PGDP
注册码 - -

KAO！又是根据什么硬件信息自动生成用户代码，然后要求你使用该代码向作者注册！一旦更换了硬件，原注册码就失效了，还得重新向作者申请，非常不爽:-(

(2) 输入相关信息：

用户姓名 Sun Bird [CCG]
注册码 AAAA-BBBB-CCCC

点“注册”，啪－－蹦出错误窗口“您输入的注册码不正确”（那当然，要是正确才怪呢^_^），先不要按“确定”（为什么？你可以马上按下“确定”后往下照做，试过以后再发问嘛^_^）

(3) 按 Ctrl-N 呼出 Trw2000（什么？你还没有运行 Trw2000？我倒……^_^）

S 30:0 FFFFFFFF 'AAAABBBBCCCC' <---- 搜索字符串“AAAABBBBCCCC”（我们刚刚输入的注册码）

Trw2000 会搜索到一个地址“1bf5a88”，同时屏幕上部的内存窗口显示如下：

0030:01BF5A88 41 41 41 41 42 42 42 42-43 43 43 43 00 00 00 01 AAAABBBBCCCC....

(4) 输入编辑内存的命令 E，光标跳至屏幕上部的内存窗口，按 PageDown 键向下查看，大约按 3 次后，内存窗口显示如下：

0030:01BF5B78 4C 4F 52 51 49 4B 45 4B-4D 4A 47 48 00 00 00 01 LORQIKEKMJGH...

“LORQIKEKMJGH”？有点可疑！呔！不用可疑了，正确的注册码就是它，So easy! ^_^

第二种方法：

(1) 同第一种方法的 (1)

(2) 输入相关信息：

用户姓名 Sun Bird [CCG]
注册码 AAAA-BBBB-CCCC

(3) 按 Ctrl-N 呼出 Trw2000（什么？你仍然没有运行 Trw2000？我又倒……^_^）

BPX HMEMCPY <---- 下“万能”断点
G <---- 继续运行（即回到 Lottery）

(4) 回到注册窗口，点“注册”，啪－－立刻蹦出错误窗口“您输入的注册码不正确”！什么？！“万能断点”失灵了！Oh, My God!（不对、不对，应该是“哦，我的老聃”，我们是中国人嘛^_^）

(5) 刚一移动鼠标，Trw2000 立刻接管，原来这时被 HMEMCPY 中断，KAO！现在再中断有个 X 用？！

BC * <---- 清除断点

(6) 哼，这可难不倒我们中国 Cracker！我们换个断点，就不信不能中断！按 Ctrl-N 重新呼出 Trw2000

BPX LSTRCMP <---- 字符串比较断点
G

(7) 回到注册窗口，点“注册”

(8) 立刻被 Trw2000 接管，程序代码区显示如下：

KERNEL32!lstrcmpA
0177:BFF77304 53 PUSH EBX
0177:BFF77305 56 PUSH ESI
0177:BFF77306 57 PUSH EDI
0177:BFF77307 55 PUSH EBP
0177:BFF77308 68F2010000 PUSH DWORD 01F2
0177:BFF7730D 68971DFABF PUSH DWORD BFFA1D97

我们来 D EAX，嗯？我们输入的注册码“AAAABBBBCCCC”；再 D EDI，哈哈，正确的注册码“LORQIKEKMJGH”！简单！^_^

总结一下：你可以编辑如下注册表文件，将其导入注册表，“选号王一号 v1.5 预览版”即成为注册版了。还有，该软件注册时与“用户姓名”无关，所以你可以将你自己的名字放在“"USERNAME"=”处。当然，如果你愿意使用我的名字，我会更高兴^_^

------------------------Lottery15.REG----------------------------
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\LOTTERY]
"REGS1"="JIUWDGLQPGDP"
"REGS2"="LORQIKEKMJGH"
"USRNAME"="Sun Bird [CCG]"

------------------------Lottery15.REG----------------------------

好了，搞定，收工！


咨讯人公司产品

 标 题:咨讯人公司产品总破解 (1千字)
发信人:小楼
时 间:2000-5-25 16:53:12
详细信息:
咨讯人公司产品总破解
我所见到的咨讯人公司产品有iq99、mp3转录精灵、抓歌大师等。其注册码计算都使用了同一算法。比较核心在checknodll.dll中。

咨讯人mp3转录精灵
——一个将wav、mp3相互转换的软件，也可以抓音轨
注册码要求11位，依次定义为(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)
按16进制计算，
sum1 = (1)*7 + (2)*11 + (3)*17 + (4)*25 + (5)*2f
+ (6)*35 + (7)*43 + (8)*49 + (9)*53 + 5b

sum2 = (10)*a + (11)

如果 sum1除以64的余数 = sum2 ，则注册成功。

咨讯人抓歌大师
——一个搜索引擎，不但可以找mp3，还可以找softwares,archives等。
注册码要求11位，依次定义为(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)
按16进制计算，
sum1 = (1)*7 + (2)*11 + (3)*17 + (4)*25 + (5)*2f
+ (6)*35 + (7)*43 + (8)*49 + (9)*53 + 2

sum2 = (10)*a + (11)

如果 sum1除以64的余数 = sum2 ，则注册成功。

iq99注册码计算见以前发表在此论坛中的文章。基本同上。
sum1 = (1)*7 + (2)*11 + (3)*17 + (4)*25 + (5)*2f + (6)*35
+ (7)*43 + (8)*49 + (9)*53

此外，iq99、咨讯人抓歌大师会教你线上注册，你可以在注册表中加入：
[HKEY_USERS\.DEFAULT\Software\Inforia\Quest\SYSTEM]
"RegistrationDone"="1"
即可。


Dun Meter Millennium Pro 1.0

 标 题:解除 Dun Meter Millennium Pro 1.0的延迟画面 (4千字)
发信人:sunwk（小楼）
时 间:2000-3-15 23:23:50
详细信息:
解除 Dun Meter Millennium Pro 1.0的延迟画面

Dun Meter Millennium Pro 1.0是一个“能测试上网速度，并且用图形和文本建立下载速度表”的软件。你能自《软件》光盘2000年第三期中或从其作者主页http://dmmillennium.cjb.net/处得到。使用时无日期限制，但有延迟画面。

Let's try to get rid of the NAG.

用Typ_d32发现此软件用ASPACK 1.083压缩。首先

第一步：解压缩
用TRW2000 LOAD DmMillennium.exe，程序自动停在入口
0167：004D0000 PUSHA
0167：004D0001 CALL 004DE006 <---用F10带过后程序主画面就显示出来。
故F8追入
以后用F10走,......这样一直走到
0167:004DE559 JNZ 004DE563 <---JUMP
0167:004DE55B MOV EAX, 01
0167:004DE560 RET 0C
0167:004DE563 PUSH EAX
0167:004DE564 RET <---走过这一步,就跳到

0167:004A1C18 ...... <---开始执行解压缩后的真正的程序代码 .
.
.
.
.

所以在 0167:004DE564 RET 这一步，可以脱壳了。TRW2000共享版未 提供PEDUMP与MAKEPE这两条命令，但我有TRW 0.75版，虽然很不稳定，却有上 述两条命令。所以改用TRW 0.75，载入后到 0167:004DE564 RET，
下命令 PEDUMP（回车）
G（回车）
你会在DESKTOP OR TRW0.75目录下 OR C盘根目录下找到DUMP1.EXE文件 ， 这就是解压缩后的DmMillennium.exe文件。但此时执行DUMP1.EXE，它会告诉你 执行了非法程序。WHY？因为它的Entry Point 是 000DE564，所以用PROCDUMP 1.62，选 PE Editor /DUMP1.EXE,将Entry Point 由000DE564 改为 000A1C18,即真正的程序入口处,OK!程序执行了。

第二步：去除延迟画面
用TRW2000再次载入DUMP1.EXE

//******************** Program Entry Point ********
:004A1C18 55 push ebp
:004A1C19 8BEC mov ebp, esp
:004A1C1B 83C4F4 add esp, FFFFFFF4
:004A1C1E 53 push ebx
:004A1C1F B818174A00 mov eax, 004A1718
:004A1C24 E8AF46F6FF call 004062D8
:004A1C29 8B1D08384A00 mov ebx, dword ptr [004A3808]
:004A1C2F 8B03 mov eax, dword ptr [ebx]
:004A1C31 E83A68FAFF call 00448470
:004A1C36 8B03 mov eax, dword ptr [ebx]
:004A1C38 BAA01C4A00 mov edx, 004A1CA0
:004A1C3D E85264FAFF call 00448094
:004A1C42 8B0DE4344A00 mov ecx, dword ptr [004A34E4]
:004A1C48 8B03 mov eax, dword ptr [ebx]
:004A1C4A 8B15D4F64900 mov edx, dword ptr [0049F6D4]
:004A1C50 E83368FAFF call 00448488
:004A1C55 8B0D64354A00 mov ecx, dword ptr [004A3564]
:004A1C5B 8B03 mov eax, dword ptr [ebx]
:004A1C5D 8B1594C24900 mov edx, dword ptr [0049C294]
:004A1C63 E82068FAFF call 00448488
:004A1C68 8B0D9C354A00 mov ecx, dword ptr [004A359C]
:004A1C6E 8B03 mov eax, dword ptr [ebx]
:004A1C70 8B1514F44900 mov edx, dword ptr [0049F414]
:004A1C76 E80D68FAFF call 00448488
:004A1C7B A19C354A00 mov eax, dword ptr [004A359C]
:004A1C80 8B00 mov eax, dword ptr [eax]
:004A1C82 8B10 mov edx, dword ptr [eax]
:004A1C84 FF92CC000000 call dword ptr [edx+000000CC]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:004A1C8A 8B03 mov eax, dword ptr [ebx]
:004A1C8C E87768FAFF call 00448508
:004A1C91 5B pop ebx
:004A1C92 E8051DF6FF call 0040399C
:004A1C97 00FF add bh, bh
:004A1C99 FFFFFF BYTE 3 DUP(0ffh)
注意到:004A1C84 FF92CC000000 call dword ptr [edx+000000CC]，由此延迟画面出现了，强迫程序跳过去即可。故
将 FF92CC000000
改为 909090909090
OK！
孙悟空七十二变之第二变 牛魔王
sunwk@sohu.com
2000.03.15


Netcaptor5.5

 标 题:Netcaptor5.5浏览器右上角广告窗口的去除方法 (3千字)
发信人:看雪
时 间:2000-4-13 20:46:08
详细信息:
1、Netcaptor是一浏览器，它內部的主要工具是套用你 IE 中的，但它提供了許多 IE 沒有的方便性，譬如你可以同時浏览多个网页，而不需开多个窗口，只需在浏览器下方就可以随时切换；你也可以利用浮动工具条上的按钮选项，快速设定不要 Load 图片以加快浏览速度。
但它有一严重缺点是在右止角有一广告窗口，很烦人，特别是脱机浏览时，一会跳出出错框：告知未连上广告商服务器，因此将这广告窗口除去显得十分必要。
2、开始时，我也没找到有效办法能去除些广告，后来偶而发现Netcaptor运行时，会在其目录下生成两个文件：ad2.htm和ad2.gif，此时打开ad2.htm则页面却是广告窗口的内容。而Netcaptor广告窗口象一小的浏览器，猜想这小浏览器一定是打开ad2.htm来显示广告的，而ad2.htm内容是动态变化，Netcaptor关闭时，此文件却消失了。因此可判断Netcaptor启动初始化时，在广告窗口初始化时需要读取ad2.htm，好！就以此我入口点。
3、我用得是Netcaptor5.5,本来想装6.0的，但是不知怎么不能安装成功。
用W32DASM打开Netcaptor的主文件，NetCaptor.exe，查找字符串ad2.htm，如下：

* Possible StringData Ref from Code Obj ->"ad2.gif"
|
:004CD83D B928E44C00 mov ecx, 004CE428
:004CD842 8B55E8 mov edx, dword ptr [ebp-18]
:004CD845 E82666F3FF call 00403E70
:004CD84A 8B45D4 mov eax, dword ptr [ebp-2C]
:004CD84D E81ABAF3FF call 0040926C
:004CD852 84C0 test al, al
:004CD854 0F8596000000 jne 004CD8F0<--------------------此处改成JMP004CD8F0
:004CD85A 8B45FC mov eax, dword ptr [ebp-04]
:004CD85D 80B8D407000000 cmp byte ptr [eax+000007D4], 00
:004CD864 7423 je 004CD889

* Possible StringData Ref from Code Obj ->"AD_GI2"
|
:004CD866 6838E44C00 push 004CE438

* Possible StringData Ref from Code Obj ->"RT_HTML"

————————————————————————————————————————
:004CD8F0 8D45D4 lea eax, dword ptr [ebp-2C]

* Possible StringData Ref from Code Obj ->"ad2.htm"
|
:004CD8F3 B960E44C00 mov ecx, 004CE460
:004CD8F8 8B55E8 mov edx, dword ptr [ebp-18]
:004CD8FB E87065F3FF call 00403E70
:004CD900 8B45D4 mov eax, dword ptr [ebp-2C]
:004CD903 E85CBAF3FF call 00409364
:004CD908 8D45D4 lea eax, dword ptr [ebp-2C]

* Possible StringData Ref from Code Obj ->"ad2.htm"
|
:004CD90B B960E44C00 mov ecx, 004CE460
:004CD910 8B55E8 mov edx, dword ptr [ebp-18]
:004CD913 E85865F3FF call 00403E70
:004CD918 8B45D4 mov eax, dword ptr [ebp-2C]
:004CD91B E84CB9F3FF call 0040926C
:004CD920 84C0 test al, al
:004CD922 0F8596000000 jne 004CD9BE<--------------------此处改成JMP 004CD9BE
:004CD928 8B45FC mov eax, dword ptr [ebp-04]
:004CD92B 80B8D407000000 cmp byte ptr [eax+000007D4], 00
:004CD932 7423 je 004CD957

* Possible StringData Ref from Code Obj ->"AD_HTM2"
|
:004CD934 6870E44C00 push 004CE470

* Possible StringData Ref from Code Obj ->"RT_HTML"
这样改了上面两处后，就可跳过ad2.htm和ad2.gif的调用，以前的广告窗口不再出现了，但有点缺憾，就是那块地方空着，看着不舒服，如能让菜单能向右移移就好了，我想肯定能修改，只是本人功底有限，不知这工具栏是如何实现的，希望高手指点为感！
我想此法适合Netcaptor各个版本。
2000年4月13日


ACD Systems

 标 题:破解ACD Systems试用软件的三步曲 (1千字)
发信人:冰毒
时 间:2000-3-4 9:46:05
详细信息:
昨晚继ACDSee 3.0 Build 1209, Picaview 1.32之后,我又破解了ACD Systems出品的第三个软件: Imagefox 1.21. 在我完成它的破解之后,我发现了一个破解ACD Systems的Trial Version软件的通用方法,贴出来供大家参考.

1. 这些软件都用Aspack加壳,先脱壳,可用unaspack或手动脱壳
2. 用Hex Editor找33C0C3(也就是xor eax,eax retn),在其前后有好多个90(也就是nop),在W32dasm中可以看到这段代码由5-6处调用,将eax赋值为1,便去除了软件开始和运行中可能弹出的Nag
3. 程序判断过期的代码是一样的

:100010E0 83F8FB cmp eax, FFFFFFFB <- eax=-5是过期标志
:100010E3 7516 jne 100010FB <-这里一定要跳走
:100010E5 E846150000 call 10002630
:100010EA 5F pop edi
:100010EB 5E pop esi
:100010EC B811000000 mov eax, 00000011
:100010F1 5B pop ebx
:100010F2 81C400020000 add esp, 00000200
:100010F8 C21800 ret 0018

程序还可能接着有第二个检查,

:100010FB 85C0 test eax, eax (或esi) <-eax应该=0
:100010FD 0F8530070000 jne 10001833

有兴趣的朋友可以从www.acdsystems.com再下载些其它的软件,试试我的办法,看是否可行. 不过,此招不灵时可别怪我. :)


CD Bar 1.03

 标 题:初学者（8） (4千字)
发信人:liutong
时 间:2000-5-7 23:16:05
详细信息:
软件名称： CD Bar
软件版本： 1.03
软件大小： 673KB
软件授权： 共享软件
使用平台： Win95/98/NT
发布公司： http://www.mindspring.com/~bytor/cdbar/cdbar.htm
软件简介： 是一个兼容性能很好的CD音频播放软件，它可以做为一个taskbar（任务栏）之中的选项，同时可以详细的显示出CD的信息，包括曲名，作者等等，最新支持
windows2000。
软件下载： cdbar.zip

使用工具:W32dasm
破解难易度:易

该软件无注册码输入画面,只有information菜单显示有关注册步骤及软件剩余使用天数.
因此,使用W32dasm,反编译后很容易地找到了线索
* Possible StringData Ref from Data Obj ->"Built on %s"<---在information菜单中显示的内容
|
:0040D3EC 68704B4400 push 00444B70
:0040D3F1 50 push eax
:0040D3F2 E85F850100 call 00425956
:0040D3F7 8B4C2410 mov ecx, dword ptr [esp+10]
:0040D3FB 83C40C add esp, 0000000C
:0040D3FE 51 push ecx
:0040D3FF 8D8E4C010000 lea ecx, dword ptr [esi+0000014C]
:0040D405 E8AED00100 call 0042A4B8
:0040D40A A088704400 mov al, byte ptr [00447088]
:0040D40F 6A00 push 00000000
:0040D411 84C0 test al, al
:0040D413 743E je 0040D453<---未经授权的转40D453,将次743E改为9090(即2个NOP)
:0040D415 8D8E98000000 lea ecx, dword ptr [esi+00000098]
:0040D41B E899D10100 call 0042A5B9
:0040D420 6A00 push 00000000
:0040D422 8D8E10010000 lea ecx, dword ptr [esi+00000110]
:0040D428 E88CD10100 call 0042A5B9
:0040D42D 8B1568704400 mov edx, dword ptr [00447068]
:0040D433 8D442404 lea eax, dword ptr [esp+04]
:0040D437 52 push edx

* Possible StringData Ref from Data Obj ->"Registered to: %s"<----显示授权信息
|
:0040D438 685C4B4400 push 00444B5C
:0040D43D 50 push eax
:0040D43E E813850100 call 00425956
:0040D443 8B4C2410 mov ecx, dword ptr [esp+10]
:0040D447 83C40C add esp, 0000000C
:0040D44A 51 push ecx
:0040D44B 8D8ED4000000 lea ecx, dword ptr [esi+000000D4]
:0040D451 EB64 jmp 0040D4B7

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040D413(C)
|
:0040D453 E868AA0000 call 00417EC0
:0040D458 8B0D84704400 mov ecx, dword ptr [00447084]
:0040D45E 83C404 add esp, 00000004
:0040D461 2BC1 sub eax, ecx
:0040D463 8BC8 mov ecx, eax
:0040D465 B807452EC2 mov eax, C22E4507
:0040D46A F7E1 mul ecx
:0040D46C C1EA10 shr edx, 10
:0040D46F B80F000000 mov eax, 0000000F
:0040D474 2BC2 sub eax, edx
:0040D476 83F801 cmp eax, 00000001
:0040D479 750D jne 0040D488
:0040D47B 50 push eax
:0040D47C 8D542408 lea edx, dword ptr [esp+08]

* Possible StringData Ref from Data Obj ->"Expires in %ld day"
|
:0040D480 68484B4400 push 00444B48
:0040D485 52 push edx
:0040D486 EB1C jmp 0040D4A4
上面的这段只是显示对程序判断是否过期无影响,判断在下面
* Possible StringData Ref from Data Obj ->"%s\"
|
:0040EFE6 68984E4400 push 00444E98
:0040EFEB 6874704400 push 00447074
:0040EFF0 E861690100 call 00425956
:0040EFF5 83C40C add esp, 0000000C
:0040EFF8 E8F3F8FFFF call 0040E8F0
:0040EFFD 84C0 test al, al
:0040EFFF 752F jne 0040F030 <--未过期转40F030
:0040F001 E8AAFBFFFF call 0040EBB0
:0040F006 84C0 test al, al
:0040F008 7426 je 0040F030 <--未过期转40F030,在上面转和在此转好象没有区别
:0040F00A 6A00 push 00000000
:0040F00C 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"Your copy of CDBar has expired. "
->" Please visit " <---过期提示
|
:0040F00E 68184E4400 push 00444E18
:0040F013 E826FD0100 call 0042ED3E
:0040F018 33C0 xor eax, eax
:0040F01A 5D pop ebp
:0040F01B 8B8C2464020000 mov ecx, dword ptr [esp+00000264]
:0040F022 64890D00000000 mov dword ptr fs:[00000000], ecx
:0040F029 81C470020000 add esp, 00000270
:0040F02F C3 ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040EFFF(C), :0040F008(C)
|
:0040F030 56 push esi

到此,软件15天后仍可正常使用,由于本人水平有限,在information菜单显示画面中register to一项仍
是空白,不知如何处理,


flash32

 标 题:破解flash32（抓图软件）实站录 (2千字)
发信人:十三少
时 间:2000-5-28 18:16:17
详细信息:
=========================破解flash32 2.18a===================
这是一个屏幕抓图软件，比较老了（最新的可能是3.0版）。记得刚用的时候，用了一
个月之后，出现了过期提示，我就再也没有办法了，只好删除。但学了这么长的时间
的Cracking，今天突然想到了这个软件，把这个软件又找了出来，以试身手。结果一
试成功，原来软件的破解竟是如此的容易！
下面我们开始破解吧：

安装软件后，将时间调过后一个月，后出现过期提示！记下提示字符
串"period is finished"，
然后用W32dasm反汇编，查找字符串"period is finished"，找到如下
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040EE27(C)　　<==这个跳转哟！:)
|

* Possible StringData Ref from Data Obj ->"The evaluation period is finished."
|
:0040EE41 6878FB4400 push 0044FB78

    根据以上代码，可以看出过期提示框是由　:0040EE27处跳来的，向上看(tKC的绝
招)，于是找到如下代码：
:0040EDFB C7051004470000010000 mov dword ptr [00470410], 00000100
:0040EE05 C70570014700FFFFFFFF mov dword ptr [00470170], FFFFFFFF
:0040EE0F A384014700 mov dword ptr [00470184], eax
:0040EE14 8915DC044700 mov dword ptr [004704DC], edx
:0040EE1A E841350200 call 00432360
:0040EE1F 83C434 add esp, 00000034
:0040EE22 48 dec eax
:0040EE23 5F pop edi
:0040EE24 744E je 0040EE74
:0040EE26 48 dec eax
:0040EE27 7418 je 0040EE41 <===将此处je nop nop
                                                      掉则可继续。:)
:0040EE29 6A00 push 00000000
:0040EE2B 6890C44000 push 0040C490
:0040EE30 6A00 push 00000000

2、用ice载入flash32.exe，在0040EE24设断，修改标记，使其不跳转，程序
继续运行，没了时间限制。
3、修改程序：
用hiew打开flash.exe找到744e74186A00，将其中7418改为9090即可削除时间限制。
真爽！

******建议大家去下载一个最新版本，看看我的方法是不是依然有效^_^

十三少[^_^]
China Cracking Group
2000.05.28


Macro MagicV4.1p

 标 题:用W32DASM破解Macro MagicV4.1p时间限制 (3千字)
发信人:DDXia
时 间:2000-2-21 12:53:45
阅读次数:56
详细信息:
用W32DASM破解Macro MagicV4.1p时间限制（转载希望保持完整）
作者：丁丁虾 又名：DDXia

文件大小：866KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    用Macro Magic指定宏指令热键. 让你快速打开应用程序. 传送邮件. 输入密码等例行工作。
http://www.newhua.com.cn/down/MMagic.exe
5分钟搞定它的时间限制，在W32DASM中可以看到“Trial Expired”的字样，然后
往上走
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004A0E6D(C)
|
:004A0E98 E82FF8FFFF call 004A06CC
:004A0E9D 85C0 test eax, eax
:004A0E9F 7F75 jg 004A0F16
^^^^^^^^^^^--->就是它就是它
修改为jmp 004a0f16
nop
nop
然后拜拜，我要上班罗，我也要BYBY！！

* Possible StringData Ref from Code Obj ->"It has been 30 days or more since "
->"you first installed Macro Magic. "
->" We sincerely hope that you have "
->"found it to be a worthwhile addition "
->"to your software library."
|
:004A0EA1 B8B4104A00 mov eax, 004A10B4
:004A0EA6 E8D9DCF9FF call 0043EB84
:004A0EAB 8B0D38434C00 mov ecx, dword ptr [004C4338]
:004A0EB1 A178444C00 mov eax, dword ptr [004C4478]
:004A0EB6 8B00 mov eax, dword ptr [eax]
:004A0EB8 8B151C214A00 mov edx, dword ptr [004A211C]
:004A0EBE E84D11F9FF call 00432010
:004A0EC3 A138434C00 mov eax, dword ptr [004C4338]
:004A0EC8 8B00 mov eax, dword ptr [eax]
:004A0ECA 8B803C020000 mov eax, dword ptr [eax+0000023C]
:004A0ED0 33D2 xor edx, edx
:004A0ED2 E8350FF8FF call 00421E0C
:004A0ED7 A138434C00 mov eax, dword ptr [004C4338]
:004A0EDC 8B00 mov eax, dword ptr [eax]
:004A0EDE 8B803C020000 mov eax, dword ptr [eax+0000023C]

* Possible StringData Ref from Code Obj ->"Trial Expired"
|
:004A0EE4 BA5C124A00 mov edx, 004A125C
:004A0EE9 E8B60FF8FF call 00421EA4
:004A0EEE A138434C00 mov eax, dword ptr [004C4338]
:004A0EF3 8B00 mov eax, dword ptr [eax]
:004A0EF5 8B8000020000 mov eax, dword ptr [eax+00000200]
:004A0EFB BA74124A00 mov edx, 004A1274
:004A0F00 E89F0FF8FF call 00421EA4
:004A0F05 A138434C00 mov eax, dword ptr [004C4338]
:004A0F0A 8B00 mov eax, dword ptr [eax]
:004A0F0C E89BF2F8FF call 004301AC
:004A0F11 E95F010000 jmp 004A1075

完成时间
2000.2.18.8:10
历时5分钟又14秒。哈哈


Namo WebEditor V3.0(

 标 题:Namo WebEditor V3.0(Final beta)时间过期的解除(难度：简单） (2千字)
发信人:cqzrd
时 间:2000-5-25 20:22:42
详细信息:
WebEditor 3是一个很好的网页制作软件，它可以使新手作出很漂亮的网页来。但时间一过便不让人用，便就有点那个了;)。

使用的工具：TRW2000121,十六进制文本编辑器

步骤：

用TRW2k载入WebEditor 3，按F10至

4F7F51 Call 00518BE4

换F8进入Call内（按F10带过过期提示便会出现），此时看一下你所处的
位置。按F10至

518BF4 Call Near [EAX+58]

换F8进入Call内，再看一下你所处的位置，会发现你又处于程式中了。按F10至

475AEB Call 00476280

换F8切入，该Call便是比较时间的程序段。下面是该Call的内容：

0167:00476280 PUSH EBP
0167:00476281 MOV EBP,ESP
0167:00476283 PUSH ECX
0167:00476284 LEA EAX,[EBP-04]
0167:00476287 PUSH EAX
0167:00476288 CALL `MSVCRT!time`
0167:0047628E ADD ESP,BYTE +04
0167:00476291 LEA ECX,[EBP-04]
0167:00476294 PUSH ECX
0167:00476295 CALL `MSVCRT!localtime` --->获得当前时间。
0167:0047629B MOV ECX,[EAX+14] --->将年放入ECX,
0167:0047629E MOV EDX,[EAX+10] --->将月放入EDX,
0167:004762A1 MOV EAX,[EAX+0C] --->将日放入EAX。
0167:004762A4 ADD ESP,BYTE +04
0167:004762A7 ADD ECX,076C
0167:004762AD INC EDX
0167:004762AE CMP ECX,07CF --->？7CF 看看是多少？
0167:004762B4 JG 004762CF --->若年大于1999则去死。用code on看一下该处的代码并记下来。
0167:004762B6 JNZ 004762BD
0167:004762B8 CMP EDX,BYTE +04
0167:004762BB JG 004762CF
0167:004762BD CMP ECX,07CF --->再比较一次年,
0167:004762C3 JNZ 004762E2 --->若二者不等（则肯定是小于过期年了），则正确执行。

以下代码请自己分析：

0167:004762C5 CMP EDX,BYTE +04
0167:004762C8 JNZ 004762E2
0167:004762CA CMP EAX,BYTE +1E
0167:004762CD JNG 004762E2
0167:004762CF PUSH DWORD CB38
0167:004762D4 CALL 0044FF20
0167:004762D9 ADD ESP,BYTE +04
0167:004762DC XOR EAX,EAX
0167:004762DE MOV ESP,EBP
0167:004762E0 POP EBP
0167:004762E1 RET

总结一下，查找 81F9CF070000 7F 19
-- --
改为 ==>90 90
OK，收工！


PicaView 1.32

 标 题:PicaView 1.32破解实战 (3千字)
发信人:冰毒
时 间:2000-3-3 22:02:41
详细信息:
用过ACDSee的朋友,可能也知道同一公司出品的Picaview. 今天从ACD公司的主页下载了Picaview 1.32,是个60天试用版本. 下面是破解过程,用时大约30分钟.

1. Picaview.dll是用aspack1.084压过的,所以先用unaspack脱壳(我用版本的是1.0.5.0),OK! 感谢毕卫国先生. :)
2. 用W32dasm反汇编picaview.dll.
3. 在Picaview菜单上大家可以见到"Purchase PicaView..."的字样,寻找它.
4. 见到下面的代码

* Reference To: USER32.InsertMenuA, Ord:0174h
|
:10001160 8B3DD8C40910 mov edi, dword ptr [1009C4D8]
:10001166 55 push ebp
:10001167 8BAC2418020000 mov ebp, dword ptr [esp+00000218]
:1000116E 8D4E01 lea ecx, dword ptr [esi+01]
:10001171 6A00 push 00000000
:10001173 8BC3 mov eax, ebx
:10001175 51 push ecx
:10001176 68000C0000 push 00000C00
:1000117B 50 push eax
:1000117C 55 push ebp
:1000117D 43 inc ebx
:1000117E FFD7 call edi
:10001180 B908A10B10 mov ecx, 100BA108
:10001185 E8B6870100 call 10019940 <- ???
:1000118A 85C0 test eax, eax
:1000118C 752B jne 100011B9 <- 如果eax不等于0, hehe
:1000118E 8B0D5CA20B10 mov ecx, dword ptr [100BA25C]
:10001194 8D442454 lea eax, dword ptr [esp+54]
:10001198 6A64 push 00000064
:1000119A 50 push eax

* Possible Reference to String Resource ID=00040: "Purchase PicaView..."
|
:1000119B 6A28 push 00000028 <- 我们在这
:1000119D 51 push ecx

5. 仔细看看那个可疑的CALL,调用的地方有多处

* Referenced by a CALL at Addresses:
|:10001108 , :10001185 , :10002135 , :100022A8 , :100076FB
|:100385EE
|
:10019940 33C0 xor eax, eax
:10019942 C3 ret

6. 挨个看一看,都是哪些地方调用这个CALL,又会发现下面这段代码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10002291(C)
|
:100022A3 B908A10B10 mov ecx, 100BA108
:100022A8 E893760100 call 10019940 <-这里
:100022AD 85C0 test eax, eax <-若eax不为0
:100022AF 0F85BD000000 jne 10002372 <-跳过过期检查
:100022B5 55 push ebp
:100022B6 B908A10B10 mov ecx, 100BA108
:100022BB E8D02C0800 call 10084F90

* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:100022C0 8B2D70C40910 mov ebp, dword ptr [1009C470]
:100022C6 8BF8 mov edi, eax
:100022C8 85FF test edi, edi
:100022CA 7F21 jg 100022ED <-未过期,跳走
:100022CC 8B155CA20B10 mov edx, dword ptr [100BA25C]<-否则
:100022D2 8D8C2498000000 lea ecx, dword ptr [esp+00000098]
:100022D9 6896000000 push 00000096
:100022DE 51 push ecx

* Possible Reference to String Resource ID=00209: "Your evaluation period is over.
Please register this softwar"
|
:100022DF 68D1000000 push 000000D1
:100022E4 52 push edx

7. 打补丁,将xor eax, eax改成mov al,01.
8. 再试试看,高兴了吧. :)
9. 程序的时间标志在注册表HKLM\software\acd systems\picaview项.你要程序显示你的大名,也请自己动手吧.

标 题:Picaview 1.32破解补充 (845字)
发信人:冰毒
时 间:2000-3-4 0:36:10
详细信息:

一时粗心,忘记试一下时间限制是否去除,结果... :)

BPX dialogboxparama, 点右键选图片,softice拦住,F12,F10

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:100010AE(C)
|
:100010E0 83F8FB cmp eax, FFFFFFFB
:100010E3 7516 jne 100010FB <-改成EB16
:100010E5 E846150000 call 10002630
:100010EA 5F pop edi <-我们在这里
:100010EB 5E pop esi
:100010EC B811000000 mov eax, 00000011
:100010F1 5B pop ebx
:100010F2 81C400020000 add esp, 00000200
:100010F8 C21800 ret 0018

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:100010E3(C)
|
:100010FB 85C0 test eax, eax
:100010FD 0F8530070000 jne 10001833 <-改成6个90


TRW2000 1.06

 标 题:用w32dasm破解trw2000 1.06时间限制 (2千字)
发信人:sunwk(小楼）
时 间:2000-3-3 14:47:14
详细信息:
解除TRW2000 1.06的时间限制
工具：
Procdump1.6.2
Hiew6.1
W32dasm8.93

首先用W32dasm载入TRW2000.EXE，但将告诉你“W32dasm执行了非法程序”，它崩溃了。
在Procdump中选择 PEeditor\指定文件 TRW2000.EXE\SECTIONS, 你会发现 .data 的 characteristics值为C0000040,将之改为60000020,保存后再用W32dasm载入,OK!
反汇编后选 refs/string data references,找到"The vention is too old, please",双击后见到如下：
* Possible StringData Ref from Data Obj ->"This version is too old , please "
->"visit http://trw2000.yeah.net "
->"to get update."
|
:004018CD 682CF14100 push 0041F12C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004016CA(U)
|
:004018D2 53 push ebx

向上找见
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040164D(C), :00401675(C)
~~~~~~~~ ~~~~~~~~
|
:004018C6 6A10 push 00000010

* Possible StringData Ref from Data Obj ->"ERROR"
|
:004018C8 6828F24100 push 0041F228

就到:0040164D(C)及:00401675(C)
:00401643 056C070000 add eax, 0000076C
:00401648 3DD0070000 cmp eax, 000007D0 <----1
:0040164D 0F8F73020000 jg 004018C6 ***2
:00401653 53 push ebx
:00401654 8D4DE8 lea ecx, dword ptr [ebp-18]
:00401657 E8AFDC0000 call 0040F30B
:0040165C 8B4010 mov eax, dword ptr [eax+10]
:0040165F 40 inc eax
:00401660 83F802 cmp eax, 00000002 <----3
:00401663 7E16 jle 0040167B ***4

猜到了吗?
1 :00401648 3DD0070000 cmp eax, 000007D0 比较年份--2000年(000007D0)
2 :0040164D 0F8F73020000 jg 004018C6 若大于2000年则过期
3 :00401660 83F802 cmp eax, 00000002 比较月份--2月(00000002)
4 :00401663 7E16 jle 0040167B 若不大于2月就跳过前面的过期提示

知道如何作了?
1 改 3DD0070000
为 3D34080000 可以用到2100年(那时可就干不动这活喽!)
2 改 7E16
为 EB16 直接跳到开始

完成了吗?运行TRW2000,它告诉你执行了非法程序。WHY？别忘了我们前面用过Procdump，只要用它将TRW2000.EXE\SECTIONS\ .data 的 characteristics值由60000020改回C0000040 ,保存后运行TRW2000,OK!

附: 1 TRW2000确实是一个好程序,不象TRW0.75版本动不动就死机。目前它的升级非常快。劝各位还是尽量用最新的版本吧，不要象我没事找使干。写这篇文章的目的是告诉大家：如何改动程序来使W32dasm工作。
2 TRW2000版的注册费要六、七十元，我不愿花这么多钱来注册。谁有注册版本，能否E-MAIL我，在此先行谢过。
孙悟空之七十二变


TRW2000 1.11

 标 题:trw2k1.11 时间过期和注册提示框去处 (1千字)
发信人:czs
时 间:2000-3-2 9:24:01
详细信息:
修改trw2000.sys:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00029137(C)
|
:000292F0 8D7E70 lea edi, dword ptr [esi+70]
:000292F3 57 push edi
:000292F4 E815B3FFFF call 0002460E
:000292F9 57 push edi
:000292FA E86DB3FFFF call 0002466C
:000292FF 803F00 cmp byte ptr [edi], 00
:00029302 7470 je 00029374
:00029304 E895BCFFFF call 00024F9E
:00029309 6A06 push 00000006
:0002930B 33D2 xor edx, edx
:0002930D 59 pop ecx
:0002930E F7F1 div ecx
:00029310 85D2 test edx, edx
:00029312 7505 jne 00029319
^^^^
EB05
:00029314 E8663EFFFF call 0001D17F
:00029319 .......

* Referenced by a CALL at Address:
|:00023306
|
:000377F6 68C5770300 push 000377C5
:000377FB 68E4C90500 push 0005C9E4
:00037800 E833BDFEFF call 00023538
:00037805 817C2404D0070000 cmp dword ptr [esp+04], 000007D0
:0003780D 7515 jne 00037824
^^^^
9090
:0003780F 837C240802 cmp dword ptr [esp+08], 00000002
:00037814 7413 je 00037829
^^^^
EB13
:00037816 837C240803 cmp dword ptr [esp+08], 00000003
:0003781B 740C je 00037829
^^^^
EB0C
:0003781D 837C240804 cmp dword ptr [esp+08], 00000004
:00037822 7405 je 00037829
^^^^
EB05
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0003780D(C)
|
:00037824 E865FFFFFF call 0003778E

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00037814(C), :0003781B(C), :00037822(C)
|
:00037829 C20800 ret 0008

标 题:TRW2K注册提示框去除说明 (5千字)
发信人:czs
时 间:2000-3-3 11:11:04
详细信息:

“TR系列和av98是本人最喜爱的软件。”

去除trw2k的注册提示框纯属偶然。本人的机器为486DX66/8900C/270M,

trw2k使用时返回windows窗口则花屏。直到1.11版，突然发现可以凑合

用了--不花屏了。本机器时间不对，trw显示trw2000 expired!后退出。

用W32DASM打开TRW2000.SYS 见下面，

:0003775A 54 push esp
:0003775B 52 push edx
:0003775C 57 push edi
:0003775D 3230 xor dh, byte ptr [eax]
:0003775F 3030 xor byte ptr [eax], dh
:00037761 206578 and byte ptr [ebp+78], ah
:00037764 7069 jo 000377CF
:00037766 7265 jb 000377CD
:00037768 642100 and dword ptr fs:[eax], eax
:0003776B 000000 BYTE 3 DUP(0)

:0003776E 53 push ebx
:0003776F 54 push esp
:00037770 4F dec edi
:00037771 50 push eax
:00037772 006A00 add byte ptr [edx+00], ch
:00037775 6A64 push 00000064
:00037777 E80155FEFF call 0001CC7D

* Possible StringData Ref from Code Obj ->"TRW2000 expired!"
|
:0003777C 685A770300 push 0003775A

* Possible StringData Ref from Code Obj ->"STOP"
|
:00037781 686E770300 push 0003776E
:00037786 E88F0DFFFF call 0002851A
:0003778B B001 mov al, 01
:0003778D C3 ret

该框和注册提示框使用同一方法，即

:00037786 E88F0DFFFF call 0002851A

注：此处本人并未修改，不知是否可以。

此处的CALL将'STOP'为标题，'trw2000 expired!'为内容，显示提示框。

然后查找调用此CALL的地方

* Referenced by a CALL at Address:
|:00029314
|
:0001D17F 60 pushad

* Possible StringData Ref from Data Obj ->"6+"
|
:0001D180 BBCE3D0400 mov ebx, 00043DCE
:0001D185 8D732C lea esi, dword ptr [ebx+2C]
:0001D188 53 push ebx
:0001D189 33DB xor ebx, ebx
:0001D18B B460 mov ah, 60
:0001D18D 33D2 xor edx, edx
:0001D18F FC cld
:0001D190 BF48D10100 mov edi, 0001D148
:0001D195 B90A000000 mov ecx, 0000000A
:0001D19A AC lodsb
:0001D19B 0FB6D0 movzx edx, al
:0001D19E 03DA add ebx, edx
:0001D1A0 2AC4 sub al, ah
:0001D1A2 FEC4 inc ah
:0001D1A4 AA stosb
:0001D1A5 E2F3 loop 0001D19A
:0001D1A7 B460 mov ah, 60
:0001D1A9 B92C000000 mov ecx, 0000002C
:0001D1AE AC lodsb
:0001D1AF 0FB6D0 movzx edx, al
:0001D1B2 03DA add ebx, edx
:0001D1B4 2AC4 sub al, ah
:0001D1B6 FEC4 inc ah
:0001D1B8 AA stosb
:0001D1B9 E2F3 loop 0001D1AE
:0001D1BB 8BD3 mov edx, ebx
:0001D1BD 5B pop ebx
:0001D1BE 3913 cmp dword ptr [ebx], edx
:0001D1C0 7408 je 0001D1CA ；这里
:0001D1C2 81C2E9D10100 add edx, 0001D1E9
:0001D1C8 FFE3 jmp ebx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001D1C0(C)
|
:0001D1CA 6852D10100 push 0001D152
:0001D1CF 6848D10100 push 0001D148
:0001D1D4 E841B30000 call 0002851A
:0001D1D9 BF48D10100 mov edi, 0001D148
:0001D1DE B937000000 mov ecx, 00000037
:0001D1E3 B000 mov al, 00
:0001D1E5 F3 repz
:0001D1E6 AA stosb
:0001D1E7 61 popad
:0001D1E8 C3 ret

看一下0001D1C0上面的几行代码，可能是将某些加密代码解密。在向后找CALL，

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00029137(C)
|
:000292F0 8D7E70 lea edi, dword ptr [esi+70]
:000292F3 57 push edi
:000292F4 E815B3FFFF call 0002460E
:000292F9 57 push edi
:000292FA E86DB3FFFF call 0002466C
:000292FF 803F00 cmp byte ptr [edi], 00
:00029302 7470 je 00029374
:00029304 E895BCFFFF call 00024F9E
:00029309 6A06 push 00000006
:0002930B 33D2 xor edx, edx
:0002930D 59 pop ecx
:0002930E F7F1 div ecx
:00029310 85D2 test edx, edx
:00029312 7505 jne 00029319
^^^^
EB05
:00029314 E8663EFFFF call 0001D17F
:00029319 .......

用HIEW修改00029312处代码，执行TRW2K，无注册提示框出现了。

注：其它版本的TRW2K亦可。

题外话：TRW2K是很好的软件，虽然还有不完善的地方。对于其作者刘涛涛

本人非常崇拜，此次未征得作者同意，还望他老人家见谅。另外对软件编写

者做一个提醒，对于软件的编写过程中，任何疏忽都会遭成意想不到的后果。

CZS

2000.3.3


TRW2000 1.11

 标 题:也谈解除TRW2000 1.11时间限制 (1千字)
发信人:sunwk（小楼）
时 间:2000-3-3 17:40:18
详细信息:
我用W32DASM反汇编TRW2000 1.11.SYS未见到如作者czs所述的
* Possible StringData Ref from Code Obj ->"TRW2000 expired!"
|
:0003777C 685A770300 push 0003775A

* Possible StringData Ref from Code Obj ->"STOP"
|
:00037781 686E770300 push 0003776E
:00037786 E88F0DFFFF call 0002851A
:0003778B B001 mov al, 01
:0003778D C3 ret
我的W32DASM是8.93完全英文版,不知道为何?

根据破解TRW2000 1.06的基础,我在TRW.SYS中用SEARCH D007找到:
:00037805 817C2404D0070000 cmp dword ptr [esp+04], 000007D0 <--1
:0003780D 7515 jne 00037824
:0003780F 837C240802 cmp dword ptr [esp+08], 00000002 <--2
:00037814 7413 je 00037829
:00037816 837C240803 cmp dword ptr [esp+08], 00000003 <--3
:0003781B 740C je 00037829
:0003781D 837C240804 cmp dword ptr [esp+08], 00000004 <--4
:00037822 7405 je 00037829
很容易的,
1 说明TRW2000 1.11只能用在2000年中.
2、3、4 说明TRW2000 1.11 只能在2、3、4月中使用

修改
1、 7515
为 9090

2 837C240802 7413
为 837C240813 7213
ok!
sunwk
e-mail: sunwk@sohu.com
HELP：谁能提供注册版的TRW2000给我，E-MAIL联系.

答复帖子：

标 题:W32DASM (57字)
发信人:冰毒
时 间:2000-3-3 18:24:20
详细信息:

有可能你用的是打过VB补丁的版本,据说会有SDR不能显示的毛病.


TRW2000 1.21

 标 题:如何对付TRW2000 1.21 (7千字)
发信人:冰毒
时 间:2000-5-26 8:45:26
详细信息:
:0003BBBF A144260600 mov eax, dword ptr [00062644]
:0003BBC4 6A06 push 00000006
:0003BBC6 33D2 xor edx, edx
:0003BBC8 59 pop ecx
:0003BBC9 F7F1 div ecx
:0003BBCB 85D2 test edx, edx
:0003BBCD 0F8516010000 jne 0003BCE9 <- !

如果这里不跳,会一直往下

:0003BBD3 6A04 push 00000004
:0003BBD5 E814CEFFFF call 000389EE
:0003BBDA 3BC3 cmp eax, ebx
:0003BBDC 59 pop ecx
:0003BBDD 740B je 0003BBEA
:0003BBDF 8BC8 mov ecx, eax
:0003BBE1 E8C2D9FEFF call 000295A8
:0003BBE6 8BF8 mov edi, eax
:0003BBE8 EB02 jmp 0003BBEC

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0003BBDD(C)
|
:0003BBEA 33FF xor edi, edi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0003BBE8(U)
|
:0003BBEC 8D4DD0 lea ecx, dword ptr [ebp-30]

后面是什么,整理一下就十分清楚了.

.0003BCAE: 885DFC mov [ebp][-0004],bl
.0003BCAA: C645FB20 mov b,[ebp][-0005],020 ;" "
.0003BCA6: C645FA21 mov b,[ebp][-0006],021 ;"!"
.0003BC5E: C645F974 mov b,[ebp][-0007],074 ;"t"
.0003BCC9: C645F869 mov b,[ebp][-0008],069 ;"i"
.0003BC5A: C645F720 mov b,[ebp][-0009],020 ;" "
.0003BCB5: C645F672 mov b,[ebp][-000A],072 ;"r"
.0003BC56: C645F565 mov b,[ebp][-000B],065 ;"e"
.0003BBFB: C645F474 mov b,[ebp][-000C],074 ;"t"
.0003BCB1: C645F373 mov b,[ebp][-000D],073 ;"s"
.0003BBEF: C645F269 mov b,[ebp][-000E],069 ;"i"
.0003BBF7: C645F167 mov b,[ebp][-000F],067 ;"g"
.0003BCC5: C645F065 mov b,[ebp][-0010],065 ;"e"
.0003BCA2: C645EF72 mov b,[ebp][-0011],072 ;"r"
.0003BCC1: C645EE20 mov b,[ebp][-0012],020 ;" "
.0003BCB9: C645ED65 mov b,[ebp][-0013],065 ;"e"
.0003BCBD: C645EC73 mov b,[ebp][-0014],073 ;"s"
.0003BC92: C645EB61 mov b,[ebp][-0015],061 ;"a"
.0003BC9E: C645EA65 mov b,[ebp][-0016],065 ;"e"
.0003BC8A: C645E96C mov b,[ebp][-0017],06C ;"l"
.0003BC8E: C645E850 mov b,[ebp][-0018],050 ;"P"
.0003BC86: C645E720 mov b,[ebp][-0019],020 ;" "
.0003BC82: C645E621 mov b,[ebp][-001A],021 ;"!"
.0003BC7E: C645E56E mov b,[ebp][-001B],06E ;"n"
.0003BC1A: C645E46F mov b,[ebp][-001C],06F ;"o"
.0003BC1E: C645E369 mov b,[ebp][-001D],069 ;"i"
.0003BC7A: C645E273 mov b,[ebp][-001E],073 ;"s"
.0003BC16: C645E172 mov b,[ebp][-001F],072 ;"r"
.0003BC72: C645E065 mov b,[ebp][-0020],065 ;"e"
.0003BC76: C645DF76 mov b,[ebp][-0021],076 ;"v"
.0003BC6E: C645DE20 mov b,[ebp][-0022],020 ;" "
.0003BC4A: C645DD6F mov b,[ebp][-0023],06F ;"o"
.0003BC6A: C645DC6D mov b,[ebp][-0024],06D ;"m"
.0003BC42: C645DB65 mov b,[ebp][-0025],065 ;"e"
.0003BC46: C645DA64 mov b,[ebp][-0026],064 ;"d"
.0003BC3E: C645D920 mov b,[ebp][-0027],020 ;" "
.0003BC9A: C645D861 mov b,[ebp][-0028],061 ;"a"
.0003BC96: C645D720 mov b,[ebp][-0029],020 ;" "
.0003BC2E: C645D673 mov b,[ebp][-002A],073 ;"s"
.0003BC3A: C645D569 mov b,[ebp][-002B],069 ;"i"
.0003BC2A: C645D420 mov b,[ebp][-002C],020 ;" "
.0003BC22: C645D373 mov b,[ebp][-002D],073 ;"s"
.0003BC26: C645D269 mov b,[ebp][-002E],069 ;"i"
.0003BC0E: C645D168 mov b,[ebp][-002F],068 ;"h"
.0003BC12: C645D054 mov b,[ebp][-0030],054 ;"T"
.0003BC07: 885DCD mov [ebp][-0033],bl
.0003BC0A: C645CC74 mov b,[ebp][-0034],074 ;"t"
.0003BC62: C645CB68 mov b,[ebp][-0035],068 ;"h"
.0003BC66: C645CA67 mov b,[ebp][-0036],067 ;"g"
.0003BC4E: C645C969 mov b,[ebp][-0037],069 ;"i"
.0003BC52: C645C872 mov b,[ebp][-0038],072 ;"r"
.0003BC36: C645C779 mov b,[ebp][-0039],079 ;"y"
.0003BC03: C645C670 mov b,[ebp][-003A],070 ;"p"
.0003BBFF: C645C56F mov b,[ebp][-003B],06F ;"o"
.0003BC32: C645C443 mov b,[ebp][-003C],043 ;"C"

** Copyright(提示窗标题)
** This is a demo version! Please register it!

时间限制(2000年4月至6月):

.00036006: 8105B8230600201C0000 add d,[0000623B8],000001C20 ?
.00036010: 8305BC23060061 add d,[0000623BC],061 ?
.00036017: 56 push esi
.00036018: 33F6 xor esi,esi
.0003601A: 813DB8230600F0230000 cmp d,[0000623B8],0000023F0 <-!

** 23F0h-1C20h=7D0h=2000

.00036024: 7408 je .00003602E
.00036026: E819FFFFFF call .000035F44 <-
.0003602B: 6A01 push 001
.0003602D: 5E pop esi
.0003602E: A1BC230600 mov eax,[0000623BC]
.00036033: 83F865 cmp eax,065

** 65-61=4

.00036036: 7205 jb .00003603D
.00036038: 83F867 cmp eax,067

** 67-61=6

.0003603B: 7608 jbe .000036045
.0003603D: E802FFFFFF call .000035F44 <-

将35F44之后的一段再整理如下

00035F69: C68578FFFFFF54 mov b,[ebp][0FFFFFF78],054 ;"T"
00035FAE: C68579FFFFFF52 mov b,[ebp][0FFFFFF79],052 ;"R"
00035FA7: C6857AFFFFFF57 mov b,[ebp][0FFFFFF7A],057 ;"W"
00035F77: C6857BFFFFFF32 mov b,[ebp][0FFFFFF7B],032 ;"2"
00035F70: C6857CFFFFFF30 mov b,[ebp][0FFFFFF7C],030 ;"0"
00035F85: C6857DFFFFFF30 mov b,[ebp][0FFFFFF7D],030 ;"0"
00035F7E: C6857EFFFFFF30 mov b,[ebp][0FFFFFF7E],030 ;"0"
00035F98: C6857FFFFFFF20 mov b,[ebp][0FFFFFF7F],020 ;" "

00035F65: C645FB50 mov b,[ebp][-0005],050 ;"P"
00035F90: C645FA4F mov b,[ebp][-0006],04F ;"O"
00035F94: C645F954 mov b,[ebp][-0007],054 ;"T"
00035F61: C645F853 mov b,[ebp][-0008],053 ;"S"

00035FC1: C6458721 mov b,[ebp][-0079],021 ;"!"
00035FC5: C6458664 mov b,[ebp][-007A],064 ;"d"
00035FB9: C6458565 mov b,[ebp][-007B],065 ;"e"
00035FBD: C6458472 mov b,[ebp][-007C],072 ;"r"
00035FA3: C6458369 mov b,[ebp][-007D],069 ;"i"
00035F9F: C6458270 mov b,[ebp][-007E],070 ;"p"
00035FB5: C6458178 mov b,[ebp][-007F],078 ;"x"
00035F8C: C6458045 mov b,[ebp][-0080],045 ;"E"
00035FC9: E8202A0000 call .0000389EE

** TRW2000 STOP Expired!


vanBasco's Midi Player 2.03

 标 题:初学者（9） (3千字)
发信人:liutong
时 间:2000-5-7 23:16:45
详细信息:
软件名称： vanBasco's Midi Player
软件版本： 2.03
软件大小： 557KB
软件授权： 共享软件
使用平台： Win95/98/NT
发布公司： http://www.vanbasco.com
软件简介： 是一套标准的MIDI和Karaoke播放软件。它的界面刻意地被设计成有效率和容易使用，有强大的功能和令人激赏的使用者界面，其叁层界面分别为：第一层为钢琴 显示器，第二层为播放界面，第三层为Karaoke设定，可设不同的音色演奏方式，或伴唱音乐，有等化器等。
软件下载： vmidi32.exe
使用工具:W32dasm
破解难易度:易

由于没有输入密码的地方,只好用W32dasm,反编译后,很容易找到线索
双击"Registered Version"到此段程序.
* Reference To: USER32.SendMessageA, Ord:0214h
|
:0041820D FF1584944300 Call dword ptr [00439484]
:00418213 FF75EC push [ebp-14]
:00418216 8D4E5C lea ecx, dword ptr [esi+5C]
:00418219 E8E4590100 call 0042DC02
:0041821E E8E8DCFEFF call 00405F0B <---关键CALL
:00418223 83F864 cmp eax, 00000064
:00418226 7E69 jle 00418291 <----小于等于100
转过期提示
:00418228 8D86DC000000 lea eax, dword ptr [esi+000000DC]
:0041822E 50 push eax
:0041822F 8D45F0 lea eax, dword ptr [ebp-10]

* Possible StringData Ref from Data Obj ->"Registered Version."
|
:00418232 68EC794400 push 004479EC
:00418237 50 push eax
:00418238 E858650100 call 0042E795
:0041823D 68CC794400 push 004479CC
:00418242 50 push eax
:00418243 8D45E8 lea eax, dword ptr [ebp-18]
:00418246 C645FC01 mov [ebp-04], 01
:0041824A 50 push eax
:0041824B E8D1640100 call 0042E721
:00418250 FF30 push dword ptr [eax]
:00418252 8D8E98000000 lea ecx, dword ptr [esi+00000098]
:00418258 C645FC02 mov [ebp-04], 02
:0041825C E8A1590100 call 0042DC02
:00418261 8D4DE8 lea ecx, dword ptr [ebp-18]
:00418264 C645FC01 mov [ebp-04], 01
:00418268 E86B620100 call 0042E4D8
:0041826D 8D4DF0 lea ecx, dword ptr [ebp-10]
:00418270 885DFC mov byte ptr [ebp-04], bl
:00418273 E860620100 call 0042E4D8
:00418278 53 push ebx

调出关键CALL,可以看到有若干调用,要改当然改此处啦,否则1,2,3,4...32个
调用够你改一阵子的.
* Referenced by a CALL at Addresses:
|:0040ECA7 , :0040ED3A , :0040EE49 , :0040F4FA , :0040FA05
|:0040FA0E , :00410520 , :00410648 , :00410767 , :0041095B
|:00410C15 , :00410CE8 , :00410EA5 , :00411B53 , :0041206A
|:0041209F , :004120DD , :0041212F , :00412857 , :00412FAF
|:00413094 , :0041317A , :00415AF0 , :004161B2 , :00416EF6
|:00416FD9 , :00417454 , :00417F06 , :0041821E , :004182AE
|:004182C3 , :00418395
|
:00405F0B A1C0644400 mov eax, dword ptr [004464C0]
:00405F10 C3 ret
任意查看了上面的几个CALL,发现都是与100比较,因此考虑将此CALL的
mov eax, dword ptr [004464C0]改为mov eax, 00000065
机器码是B8 65 00 00 00


WebDrive 2.2

 标 题:破解用Vboxs420.dll加密的WebDrive 2.2 (1千字)
发信人:郭大志
时 间:2000-6-6 8:54:06
详细信息:
WebDrive 2.2(主程序webdrive.exe长度106,828字节）
http://www.riverfrontsoftware.com

这个东西用VBox 4.20加密的，只有一个DLL即vboxs420.dll。我的SoftICE 4.05用SoftICE Backdoor Keeper打过补丁，没看见它检测到SoftICE。用bpx DialogBoxParamaA设断点，等它显示Nag时就会断下来，按一下f12，然后点击Try按钮，就会看见如下的代码：

:10002FA0 CALL [EAX+2C] //若未过期则在EAX中返回B164
:10002FA3 CMP EAX,EBX
:10002FA5 JNZ 10002FBA //这个地方如果不跳走就说明程序出错了
:10002FA7 MOV EAX,[1006EDB8]
:10002FAC PUSH EDI
:10002FAD PUSH FF
:10002FAF PUSH ESI
:10002FB0 MOV ECX,[EAX+04]
:10002FB3 CALL 100282F0
:10002FB8 JMP 10002FF1
:10002FBA MOV EAX,[1006EDB8]
:10002FBF PUSH 00
:10002FC1 PUSH 1000322F
:10002FC6 PUSH DWORD PTR [EAX+3C]
:10002FC9 MOV EAX,[100696B0]
:10002FCE PUSH 000000CB
:10002FD3 PUSH DWORD PTR [EAX+08]
:10002FD6 CALL [USER32!DialogBoxParamA] //显示Nag
:10002FDC MOV ESI,EAX //若选Try则EAX为0，选Quit则为1
:10002FDE CALL 100031B0
:10002FE3 PUSH ESI
:10002FE4 CALL 10002FF5
:10002FE9 AND DWORD PTR [1006EDB8],00
:10002FF0 POP ECX
:10002FF1 POP EDI
:10002FF2 POP ESI
:10002FF3 POP EBX
:10002FF4 RET

按几下F12就到如下的地方：

:00406B8A PUSH 01
:00406B8C CALL 004063D0 //在这里头显示Nag
:00406B91 ADD ESP,04
:00406B94 TEST EAX,EAX
:00406B96 JZ 00406DE8 //过期则跳走
:00406B9C MOV ECX,0040F320
:00406BA1 CALL 004016E0
:00406BA6 MOV ECX,0040F348

很显然，只要不要让它跳走即可，由于Vboxs420.dll和webdrive.exe均变换过，而且结合得比较紧密（就是所吹的injection）写一个process patcher即可，它没有CRC校验。跳过JZ前面的那个CALL则连Nag也没有了。


Cpix

 标 题:为了我们的下一代，用W32DASM破解看图工具Cpix.exe (5千字)
发信人:DDXia
时 间:2000-2-21 12:51:49
详细信息:
为了我们的下一代，用W32DASM破解看图工具Cpix.exe （转载希望保持完整）
作者：丁丁虾 又名：DDXia

一个小时前刚用W32DASM破解《虚幻立体制作》共享版 v1.0
手有些痒，按奈不住热情！花了20分钟破了一个时间限制的软件的
http://www.newhua.com.cn/down/cpx32.exe
软件简介：
    一个不错的看图工具，还提供多种对图片加密的方式,避免你个人收集的图片被人偷看!
首先用破解极品W32DASM打开Cpix.exe，然后用StrnREF功能，可以看到
"past the 30-day evaluation period." 赶紧就追了过去！再往上走走看会有收获的。:) 这次可要好好分析一下了看如下分析：
* Possible StringData Ref from Code Obj ->"You have "
|
:0047E8C3 68C0EB4700 push 0047EBC0
:0047E8C8 8BC6 mov eax, esi
:0047E8CA 99 cdq
:0047E8CB 33C2 xor eax, edx
:0047E8CD 2BC2 sub eax, edx
:0047E8CF 8BC3 mov eax, ebx
:0047E8D1 8D9598FEFFFF lea edx, dword ptr [ebp+FFFFFE98]
:0047E8D7 E82C8FF8FF call 00407808
:0047E8DC FFB598FEFFFF push dword ptr [ebp+FFFFFE98]

* Possible StringData Ref from Code Obj ->" day"
|
:0047E8E2 68D4EB4700 push 0047EBD4
:0047E8E7 8D8594FDFFFF lea eax, dword ptr [ebp+FFFFFD94]
:0047E8ED 8D55EF lea edx, dword ptr [ebp-11]
:0047E8F0 E8AF53F8FF call 00403CA4
:0047E8F5 FFB594FDFFFF push dword ptr [ebp+FFFFFD94]

* Possible StringData Ref from Code Obj ->" left in your 30-day evaluation "
->"period."
|
:0047E8FB 68E4EB4700 push 0047EBE4
:0047E900 8D859CFEFFFF lea eax, dword ptr [ebp+FFFFFE9C]
:0047E906 BA05000000 mov edx, 00000005
:0047E90B E8B054F8FF call 00403DC0
:0047E910 8B859CFEFFFF mov eax, dword ptr [ebp+FFFFFE9C]
:0047E916 668B0D00EA4700 mov cx, word ptr [0047EA00]
:0047E91D 33D2 xor edx, edx
:0047E91F E8BC1EFCFF call 004407E0
:0047E924 E988000000 jmp 0047E9B1
^^^^^^^^^^^^----->如果还没有过期的话，
就继续执行它
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0047E898(C), :0047E8A0(C)
|
:0047E929 85F6 test esi, esi
:0047E92B 0F8E80000000 jle 0047E9B1
^^^^^^^^^^^^-----> 这是小于等于30天也继 续执行它
:0047E931 C605FC94480001 mov byte ptr [004894FC], 01
:0047E938 83FE01 cmp esi, 00000001
:0047E93B 7506 jne 0047E943
^^^^^^^^^^^^----->这个就不用说了。自己去 折磨吧！^_^
:0047E93D C645EF00 mov [ebp-11], 00
:0047E941 EB06 jmp 0047E949

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047E93B(C)
|
:0047E943 66C745EF0173 mov [ebp-11], 7301

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0047E941(U)
|
:0047E949 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"You have used CryptaPix "
|
:0047E94B 6814EC4700 push 0047EC14
:0047E950 8D9598FEFFFF lea edx, dword ptr [ebp+FFFFFE98]
:0047E956 8BC6 mov eax, esi
:0047E958 E8AB8EF8FF call 00407808
:0047E95D FFB598FEFFFF push dword ptr [ebp+FFFFFE98]

* Possible StringData Ref from Code Obj ->" day"
|
:0047E963 68D4EB4700 push 0047EBD4
:0047E968 8D8594FDFFFF lea eax, dword ptr [ebp+FFFFFD94]
:0047E96E 8D55EF lea edx, dword ptr [ebp-11]
:0047E971 E82E53F8FF call 00403CA4
:0047E976 FFB594FDFFFF push dword ptr [ebp+FFFFFD94]

* Possible StringData Ref from Code Obj ->" past the 30-day evaluation period."
|
:0047E97C 6838EC4700 push 0047EC38
:0047E981 8D859CFEFFFF lea eax, dword ptr [ebp+FFFFFE9C]
:0047E987 BA05000000 mov edx, 00000005
:0047E98C E82F54F8FF call 00403DC0
:0047E991 8B859CFEFFFF mov eax, dword ptr [ebp+FFFFFE9C]
:0047E997 668B0D00EA4700 mov cx, word ptr [0047EA00]
:0047E99E 33D2 xor edx, edx
:0047E9A0 E83B1EFCFF call 004407E0
:0047E9A5 33D2 xor edx, edx
:0047E9A7 A1E4744800 mov eax, dword ptr [004874E4]
:0047E9AC E89B050000 call 0047EF4C

最后是破解它了
:0047E92B 0F8E80000000 jle 0047E9B1
^^^^^^^^^^^^----->改为jmp 0047E9B1
注意它的二进制码为EB81000000比原来还少两个字节为了代码保持完整加一个90 nop 就OK了-------》可要记住了NEWBABIES :)))
OK!大功告成！好累今天晚啊！！都23:26了！
又破又"泻"真累，今天就到这吧！嘿嘿 一修哥！！！！啊！！！

完成时间
2000.2.17 23:43:51


自然码输入系统2000

 标 题:自然码输入系统2000 for NT/2K破解（PECOMPACT壳)，见笑啦:) (3千字)
发信人:shizg
时 间:2000-6-24 8:41:16
详细信息:
发信人: shizg (刀客☆永远的痛), 信区: Hacker
标 题: Re: 大自然输入系统2000 for NT/2K到期了:(
发信站: BBS 水木清华站 (Fri Jun 23 14:00:12 2000)

我将破解的文件放到lib.pku/incoming/zrm_crack/zrm32.exe
覆盖安装目录下的原文件就可以了。
下面内容供有兴趣的朋友看，否则有点像灌水，呵呵。
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

这东东是加Pecompact壳的，有关PECompact壳可以看很多FTP站点介绍，可以压缩
exe,dll等，最高可达20%，太酷。可惜有关这软件的脱壳不多，我尝试用pcdump
脱，但没有成功（哪位有成功经验，请告诉我，谢谢）。只好用TRW2000(S-ICE一样）来自己脱，倒是很顺利，脱壳后，
就很easy了。有兴趣的朋友，可以自己脱试试。
提示：441ac8附近，有一条指令push 4196e3，这就是真正的入口了。前面有一段
是反复解码，不要搞晕了，呵呵。
在4196e3处，你将发现熟悉的pe文件开头的代码，如果是trw2000，直接makepe，
就完全脱壳了。S-Ice可以装icedump来脱，具体我就不说了。

下面就是将脱壳后的程序关于过期代码解除掉。下命令bpx getsystemtime，运行
脱出来的的程序，中断，f12跳出后，下面就是一大堆比较日期，如下：
4185e8是不能去的，去了就过期了。
倒数第2句41858c是要去的，否则会提示你快到期了。就这两点。

* Reference To: KERNEL32.GetSystemTime, Ord:0000h
|
:004184F8 FF15B8F04100 Call dword ptr [0041F0B8]
:004184FE 0FB745F0 movzx eax, word ptr [ebp-10]
:00418502 8D4810 lea ecx, dword ptr [eax+10]
:00418505 81F9E0070000 cmp ecx, 000007E0
:0041850B 7C10 jl 0041851D
:0041850D 0FB74DF2 movzx ecx, word ptr [ebp-0E]
:00418511 83C119 add ecx, 00000019
:00418514 83F91F cmp ecx, 0000001F
:00418517 0F8FCB000000 jg 004185E8
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041850B(C)
|
:0041851D 8D48DA lea ecx, dword ptr [eax-26]
:00418520 81F9AA070000 cmp ecx, 000007AA
:00418526 0F8FBC000000 jg 004185E8
:0041852C 8D48BD lea ecx, dword ptr [eax-43]
:0041852F 81F98D070000 cmp ecx, 0000078D
:00418535 7F10 jg 00418547
:00418537 0FB74DF2 movzx ecx, word ptr [ebp-0E]
:0041853B 83C137 add ecx, 00000037
:0041853E 83F93B cmp ecx, 0000003B
:00418541 0F8CA1000000 jl 004185E8
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00418535(C)
|
:00418547 8D48CF lea ecx, dword ptr [eax-31]
:0041854A 81F99F070000 cmp ecx, 0000079F
:00418550 0F8C92000000 jl 004185E8
:00418556 83C056 add eax, 00000056
:00418559 33F6 xor esi, esi
:0041855B 3D26080000 cmp eax, 00000826
:00418560 752A jne 0041858C
:00418562 0FB745F2 movzx eax, word ptr [ebp-0E]
:00418566 83C05F add eax, 0000005F
:00418569 83F865 cmp eax, 00000065
:0041856C 751E jne 0041858C
:0041856E 0FB745F6 movzx eax, word ptr [ebp-0A]


oicq build 0425

 标 题:oicq build 0425 的不完全破解 (3千字)
发信人:小楼
时 间:2000-5-28 20:25:49
详细信息:
oicq build 0425 的不完全破解

申明：本文单纯从程序角度谈了oicq build 0425 的破解问题。欢
迎阅读、指教。但本人对由使用本文进行的一切活动不负任
何责任。

如果你可以得到某人的oicq谈话记录文件，而又对他与其好友的谈话记录感兴趣，你会如何呢？用oicq谈话阅读器？可惜它不支持0220以后的版本；再说其作者也会叫你用“穷举法”来得到密码，如果设置的密码在9位以上，用“穷举法”的时间以日、月计，你就别想了。
其实我们可以毫不费力的进入观看。
首先将谈话文件夹（如7145021）放入oicq安装目录下，再在oicq\dat目录下用ultraedit打开oicq2000.cfg，在 00000009h处记录了所使用帐号的个数，后面即为帐号，只要按照“ 07 00 00 00 帐号的ascii码”形式（如 07 00 00 00 31 31 32 35 34 31 34） 加入即可。若帐号小于7位，还需用 20 补足位数（如 07 00 00 00 31 31 32 35 34 31 20）。
这样你运行oicq build 0425 后，要看的帐号就出现了，选它，随便填个密码。用trw bpx hmemcpy设断后，按下“登录”，程序为trw阻断。
bd 中断断点
f12 按44下，改
f10 走，
直到
:004370E7 E808A6FFFF call 004316F4
:004370EC 3BC3 cmp eax, ebx <-- ebx恒为0，
eax可为0或1
:004370EE 0F858F010000 jne 00437283 <-- 不跳就失败
:004370F4 A130D34E00 mov eax, dword ptr [004ED330]
:004370F9 8945E4 mov dword ptr [ebp-1C], eax
:004370FC 8D45E4 lea eax, dword ptr [ebp-1C]

* Possible Reference to String Resource ID=33357: "揺?
!焮U勂
"
|
:004370FF 684D820000 push 0000824D
:00437104 50 push eax
:00437105 C645FC04 mov [ebp-04], 04
:00437109 E8B707FFFF call 004278C5
:0043710E 59 pop ecx
:0043710F 59 pop ecx
:00437110 53 push ebx
:00437111 6804010000 push 00000104
:00437116 FF75E4 push [ebp-1C]
:00437119 E830650500 call 0048D64E <--密码错误画面
所以将 004370EE 0F858F010000 jne 00437283
改为 004370EE 0F848F010000 je 00437283
后，你就可以进入这一帐号了。

如果还被设置了本地密码，你就先只能随便填个密码喽。用bpx hmemxpy设断后，f12要按56下，直到你来到
:00432E5D 8D4DF0 lea ecx, dword ptr [ebp-10]
:00432E60 7525 jne 00432E87 <-- 不跳就失败，所以要让它跳
:00432E62 E864350500 call 004863CB
:00432E67 E954FFFFFF jmp 00432DC0
这样你就可以进入他的帐号，看看它的聊天记录，他的好友名单......

所以我要说，腾讯公司是个不负责任的公司。它应该将输入的密码换算后，作为密钥来解开被加密的谈话记录，而不是仅将其作直接比较。

关于密码的破解，实在让我感到烦琐，所以就没有去深追。有兴趣的朋友可以参考如下：
1、:0046E987 F3 repz
:0046E988 A7 cmpsd <--edi放置了经变换后的输入密码，esi放置了加密后正确密码值。共比较16位，两者相等表示密码正确。
:0046E989 7427 je 0046E9B2

2、整个密码的最重要的变形、换算在
:00442B40 030E add ecx, dword ptr [esi]
.....
:0044343B C3 ret <--很有规律，但也太烦

3、由此得到的数字又经
:004434D5 E821F6FFFF call 00442AFB <--f8进入，即为第3步
:004434DA 8B44241C mov eax, dword ptr [esp+1C]
:004434DE 8B0E mov ecx, dword ptr [esi]
:004434E0 83C40C add esp, 0000000C
:004434E3 8BD1 mov edx, ecx
......
:00443556 C3 ret
变换，得到第2步中的edi值。


拼音加加2.0版

 标 题:我爱暴力！！！ 如何去除“拼音加加2.0版”的功能限制 (1千字)
发信人:sunwk（小楼）
时 间:2000-4-19 23:58:16
详细信息:
我爱暴力！！！ 如何去除“拼音加加2.0版”的功能限制

今天买了一份最新的《电脑报》，看到上面有介绍一个新的输入法——拼音加加2.0，说可以：无须切换的中英文混合输入，三重码显示等等。喔！小弟打字一向不快，又最烦上网时一会儿输入中文，一会儿输入英文，不断的换输入法，马上到http://www.6h.com.cn下载了一份。用一用，果然省事。
接下来就是研究其主页上所说的功能限制了。它如是说：
1. 在安装软件时征得用户同意(我不同意你也改呀！！！）后，拼音加加将把用户计算机中的网络浏览器的默认首页设为http://vs.6h.com.cn。用户可以无限期免费使用拼音加加，而且其功能也和付费方式完全一样。
2. 如果用户希望保留浏览器的默认首页设置，就应当购买注册号。注册号可以直接在线购买到。注册费30元人民币。
付注册费，好像不是我的性格；让出浏览器的首页，也非我的所愿。怎么办？当然是破解了。
先要找准目标。安装此程序时我用system mechanic检测，知道它给我加了多少文件。试一试，知道注册程序是c:\windows\system\ime\ rovasoft\pyregagent.exe
主程序是c:\windows\system\pyintau.exe
用w2dasm反汇编pyregagent.exe，试着强迫其注册，但不能成功。但我知道了改变我浏览器首页的是pyintau.exe，就改变方向，想让其运行时不去动我的首页，但也未获得成功。怎么办？
停下来，用你的大脑想一想。它用http://vs.6h.com.cn?ID=#&AG=#改，我让它还是用我首页的路径替换不就行了吗？（比如我的首页是about:blank，让他还是改为about:blank）。就用ultraedit打开 pyintau.exe，搜索http://vs.6h.com.cn?，只找到一处，将之改为about:blank，多余的其它词都用....（00h）替换，将其后的一个about:blank也用...换掉。保存文件后执行一遍，ok！30元省下来了！


Icon Catcher

 标 题:一个Delphi程序的破解: Icon Catcher (1千字)
发信人:冰毒
时 间:2000-3-16 10:02:04
详细信息:
目标程序: Icon Catcher 3.0.1.324
程序用途: 从DLL, EXE, ICO, ICL和BMP文件中抓出图标
下载地址: http://www.helexis.com/ic/iconcatc.exe 或
http://skyscraper.fortunecity.com/pacific/730/software/iconcatc.exe
文件大小: 416K
保护类型: 加壳,使用功能限制(不能存盘或拷贝至剪贴板)

**该程序不大,而且也很好用,有兴趣的朋友不妨下载一试. 我这里说的破解方法不一定是
最好的,你的破解经过如果与之不同,欢迎贴出来交流. 冰毒 2000.3.16

1. 脱壳: 程序用Neolite 2.0加壳,很容易脱掉,而且脱壳程序不改程序入口值也可以正常运行.

2. 去除功能限制: 利用程序的警告框,不难追到下面这段代码

014F:00480549 FF5130 CALL [ECX+30]
014F:0048054C 8BD8 MOV EBX,EAX <----改成 MOV BL,01
014F:0048054E 84DB TEST BL,BL
014F:00480550 750F JNZ 00480561
014F:00480552 66837E3A00 CMP WORD PTR [ESI+3A],00
014F:00480557 7408 JZ 00480561
014F:00480559 8BD6 MOV EDX,ESI
014F:0048055B 8B463C MOV EAX,[ESI+3C]
014F:0048055E FF5638 CALL [ESI+38] <----这个CALL!
014F:00480561 8BC3 MOV EAX,EBX

3. 去掉主窗口右下角和About显示中的'UNREGISTERED COPY'字样:

不象上面两项那么容易. :) 你有无更好的方法?

用eXeScope编辑脱壳的文件,找到下面的部分(RCDATA->TMAINFORM)

object License: TLicense
EncodingKey = 'v=X]8}%KW]QVax"I&'
MasterKey = 'y=w/c9r<qY}'
sRegisteredTo = '_Xt\�grerW-g|'
sUnregistered = 'f=c4X8dCVAV312`?j'
RegistrationURL = 'http://www.helexis.com/ic/register.html'
ReleaseDate = 36492
List = ';%;%;%@.;'#2#21
OnBadLicense = SelfInstaller1BadLicense
Left = 144
Top = 112

把sUnregistered = 'f=c4X8dCVAV312`?j'这一行删除. 收工!


jslwl

 标 题:这个软件请各位大侠各一点提示（内有下载地址） (106字)
发信人:copyyour
时 间:2000-6-9 22:10:12
详细信息:
http://ilike.myrice.com:8080/cgi-bin/dl.pl?url=ftp://ftp.zj.ilike.myrice.com/ilike/soft/soft_cai/jslwl.zip

标 题:哈哈，这个玩意儿的注册码比较搞笑！ (830字)
发信人:郭大志
时 间:2000-6-9 23:09:32
详细信息:

比较注册码的关键代码如下，又是浮点运算，记得用wf打开SoftICE的浮点寄存器窗口。

它是这样判断注册码的：
if ( (真注册码 减去 假注册码) < 10的负8次方）
{
good guy;
}
else
{
bad guy;
}

这样的话在执行下面的FSUBR指令之前看一下ST0寄存器中的值，这个值就是真正的注册码（取8位小数的精度即可）。

一个可用的注册码（注意密码是个负小数）：
学校： Internet
姓名： Cracker
密码： -0.93016765

0167:00437207 FSUBR REAL8 PTR [EBP-6C] //寄存器ST0中的正确注册码减去你输入的假注册码
0167:0043720A ADD ESP,-08
0167:0043720D FSTP REAL8 PTR [ESP]
0167:00437210 CALL 004AAB94
0167:00437215 ADD ESP,08
0167:00437218 FCOMP REAL8 PTR [00437480] //差应小于10的负8次方
0167:0043721E FSTSW AX
0167:00437220 SAHF
0167:00437221 JAE 00437408 //差大于10的负8次方就错了


MP3音乐管理大师

 标 题:试试这个软件（内有下在地址及说明) (81字)
发信人:copyyour
时 间:2000-6-12 0:16:17
阅读次数:98
详细信息:
<<MP3音乐管理大师>>

http://go.163.com/~xiongjingcheng/soft/mp3gl_setup.exe

标 题:搞定 (3千字)
发信人:郭大志
时 间:2000-6-16 15:11:49
详细信息:

用SoftICE和SmartCheck结合将这个VB6程序搞定。
注册号是很好找的，用rtcMsgBox或MultiByteToWideChar设断点，
看见如下的判断：
0167:004C546D 50 PUSH EAX
0167:004C546E FF1568104000 CALL [00401068]
0167:004C5474 8B45E4 MOV EAX,[EBP-1C]
0167:004C5477 50 PUSH EAX
0167:004C5478 FF1550104000 CALL [00401050]
0167:004C547E 8B3DB4114000 MOV EDI,[004011B4]
0167:004C5484 8BD0 MOV EDX,EAX
0167:004C5486 8D4DE8 LEA ECX,[EBP-18]
0167:004C5489 FFD7 CALL EDI
0167:004C548B 8D4DE4 LEA ECX,[EBP-1C]
0167:004C548E FF15FC114000 CALL [004011FC]
0167:004C5494 8D4DD8 LEA ECX,[EBP-28]
0167:004C5497 FF15F8114000 CALL [004011F8]
0167:004C549D E85EF5FFFF CALL 004C4A00
0167:004C54A2 8B4DE8 MOV ECX,[EBP-18]
0167:004C54A5 8B1528704C00 MOV EDX,[004C7028]
0167:004C54AB 51 PUSH ECX //错误的注册码
0167:004C54AC 52 PUSH EDX //正确的注册码
0167:004C54AD FF15D4104000 CALL [004010D4] //比较注册码
0167:004C54B3 85C0 TEST EAX,EAX
0167:004C54B5 0F85C5010000 JNZ 004C5680

这个软件必须写注册机，先用SoftICE跟一下，经过漫长的跟踪后发现它在下面的地方将你的软件编号的第k个字符乘以(k+1)。

0167:004C4B29 DB856CFFFFFF FILD DWORD PTR [EBP-0094]
0167:004C4B2F C745A805000000 MOV DWORD PTR [EBP-58],00000005
0167:004C4B36 DD9D64FFFFFF FSTP REAL8 PTR [EBP-009C]
0167:004C4B3C DC8D64FFFFFF FMUL REAL8 PTR [EBP-009C] //相乘
0167:004C4B42 DD5DB0 FSTP REAL8 PTR [EBP-50]
0167:004C4B45 DFE0 FSTSW AX
0167:004C4B47 A80D TEST AL,0D
0167:004C4B49 0F85A0020000 JNZ 004C4DEF

比如我的软件编号为174078570，它在前面添个0，变成0174078570，然后就有：
0 乘以 1 ＝0
1 乘以 2 ＝2
7 乘以 3 ＝21
4 乘以 4 ＝16
0 乘以 5 ＝0
7 乘以 6 ＝42
8 乘以 7 ＝56
5 乘以 8 ＝40
7 乘以 9 ＝63
0 乘以 10 ＝0

之后用SoftICE就跟丢了。改用SmartCheck，发现它把上面的乘积串成一个字符串“0221160425640630”，
然后取该串的前9个字符“022116042”，然后将该串转换成相应的十进制数22116042，该数对应的十六进制表示为15176CA，再在十六进制表示的前面和后面各加上软件作者的姓名的声母H、P，就得到了注册号H15176CAP。

注册机：

#include <stdio.h>
#include <string.h>

void main(void)
{

char buf[128] = "0";
char SerialStr[128], CodeStr[128];
int k;
long RegCode;

printf("请输入你的软件编号: ");
gets(SerialStr);

strcat(buf, SerialStr);
CodeStr[0] = '\0';
for (k = 0; k < strlen(buf); k++)
{
sprintf(SerialStr, "%d", ((buf[k] - '0') * (k+1)) & 0xFF);
strcat(CodeStr, SerialStr);
}

CodeStr[9] = '\0';
sscanf(CodeStr, "%lu", &RegCode);

printf("你的注册号是: ");
printf("H%lXP\n", RegCode);
}


Unlock （CrackMe）

 标 题:攻擂: Unlock (1千字)
发信人:冰毒
时 间:2000-3-7 6:05:26
详细信息:
尚未成功. 但似乎程序并不在乎输入的是什么,而是所输字串的长度. 下面的这段代码是关键.

* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h
|
:0041333E E8A1DEFEFF Call 004011E4
:00413343 69C04D010000 imul eax, 0000014D <-字串的长度乘以333
:00413349 898560FFFFFF mov dword ptr [ebp+FFFFFF60], eax
:0041334F DB8560FFFFFF fild dword ptr [ebp+FFFFFF60]<-这里
用WF打开浮点寄存器窗,好象TRW2000不行
:00413355 DC3560104000 fdiv qword ptr [00401060]
:0041335B DC3568104000 fdiv qword ptr [00401068]
:00413361 DC2570104000 fsub qword ptr [00401070]
:00413367 DC2578104000 fsub qword ptr [00401078]
:0041336D DC2590104000 fsub qword ptr [00401090]
:00413373 DD1D4C404100 fstp qword ptr [0041404C]
:00413379 DD0544404100 fld qword ptr [00414044]
:0041337F DC1D98104000 fcomp qword ptr [00401098]<-比较
:00413385 DFE0 fstsw ax
:00413387 9E sahf
:00413388 7528 jne 004133B2 <-这里如果不跳,且eax=0即可
:0041338A 833DAC44410000 cmp dword ptr [004144AC], 00000000
:00413391 750F jne 004133A2

标 题:终于把序列号的计算关系式找出来了,只是不知正误. (6千字)
发信人:看雪
时 间:2000-3-7 22:15:50
详细信息:

这里是冰毒大侠抓取的一段代码，我换算了一下，假定我们的数字长度是在
:0041337F DC1D98104000 fcomp qword ptr [00401098]处比较
但不能计算出整数长度数字，结果为102.5，此时输入102位和103位数字都不能成功，难到该CrackMe没有序列号？好吧让我们仔细分析这段代码。

第一段：

* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h
|
:0041333E E8A1DEFEFF Call 004011E4
:00413343 69C04D010000 imul eax, 0000014D <-字串的长度乘以333
:00413349 898560FFFFFF mov dword ptr [ebp+FFFFFF60], eax
<-这里用WF打开浮点寄存器窗,好象TRW2000不行
:0041334F DB8560FFFFFF fild dword ptr [ebp+FFFFFF60]<--将结果放入浮点寄存器
:00413355 DC3560104000 fdiv qword ptr [00401060] <--除以（401060内的值，用dl看）这里除8
:0041335B DC3568104000 fdiv qword ptr [00401068] <--除以60
:00413361 DC2570104000 fsub qword ptr [00401070] <--加2（实际是-(-2)）
:00413367 DC2578104000 fsub qword ptr [00401078] <--减0.375
:0041336D DC2590104000 fsub qword ptr [00401090] <--减0.8375
:00413373 DD1D4C404100 fstp qword ptr [0041404C] 储存结果于41404c
:00413379 DD0544404100 fld qword ptr [00414044]
:0041337F DC1D98104000 fcomp qword ptr [00401098]<-这里[00401098]为72,结果却不是和[0041404C]刚才计算的数据比较，因此刚才是白算一场了。而是和它的上一行处的[00414044] 比较，此时你令e 00414044 72即可注册成功。[00414044]并不在上面一段程序计算的，在你来到:00413343处，它的结果早已计算好。
因此我们要找到[00414044]的值何处计算处！向上看看，你会发现如下代码：

第二段
————————————————————————————————————————————

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041326F(C)
|
:004132E2 DD45E0 fld qword ptr [ebp-20]<--第三段传来的S放入浮点寄存器
:004132E5 DC3558104000 fdiv qword ptr [00401058]
:004132EB FF75E8 push [ebp-18]
:004132EE DD5DE0 fstp qword ptr [ebp-20]--这里的值和本段下面的ebp-20（1处）值相同 你们观察一下会发现S的最后的零没有了，就成了上面的ebp-18的值，即：此处＝S/10

* Reference To: MSVBVM50.__vbaLenBstr, Ord:0000h
|
:004132F1 E8EEDEFEFF Call 004011E4
:004132F6 69C09A020000 imul eax, 0000029A
:004132FC 898564FFFFFF mov dword ptr [ebp+FFFFFF64], eax
:00413302 FF75E8 push [ebp-18]
:00413305 DB8564FFFFFF fild dword ptr [ebp+FFFFFF64]
:0041330B DC3560104000 fdiv qword ptr [00401060]
:00413311 DC3568104000 fdiv qword ptr [00401068]
:00413317 DC2570104000 fsub qword ptr [00401070]
:0041331D DC2578104000 fsub qword ptr [00401078]
:00413323 DD1D3C404100 fstp qword ptr [0041403C]
:00413329 DD45E0 fld qword ptr [ebp-20] <--装入ebp-20的值计算 <--1
:0041332C DC3580104000 fdiv qword ptr [00401080]<--除以 [00401080]的值，其定值：6780496716
:00413332 DC0D88104000 fmul qword ptr [00401088]<--乘以 [00401088]的值，其定值：3
:00413338 DD1D44404100 fstp qword ptr [00414044]将结果放入[00414044]！！！！
经过多试几次，发现只有[ebp-20] 的值和我们输入的序列号有关，因此我们将注意力放在何处使[ebp-20] 的值变化。

第三段
——————————————————————————————————————————
在W32dsm89里向上看看，就会看到下面的计算序列号核心处：

:0041326B 663B7580 cmp si, word ptr [ebp-80]<--si是你的序列号的个数n
:0041326F 7F71 jg 004132E2 <--有几个就循环几次，计算完就跳出，此时ebp-20=1627319211840就成功
:00413271 8D45E8 lea eax, dword ptr [ebp-18]

* Possible Reference to String Resource ID=00001: "Thank you for registering"
|
:00413274 C745CC01000000 mov [ebp-34], 00000001
:0041327B 8945AC mov dword ptr [ebp-54], eax
:0041327E 8D45C4 lea eax, dword ptr [ebp-3C]
:00413281 50 push eax
:00413282 897DC4 mov dword ptr [ebp-3C], edi
:00413285 0FBFC6 movsx eax, si
:00413288 50 push eax
:00413289 8D45A4 lea eax, dword ptr [ebp-5C]
:0041328C 50 push eax
:0041328D 8D45B4 lea eax, dword ptr [ebp-4C]
:00413290 50 push eax
:00413291 C745A408400000 mov [ebp-5C], 00004008

* Reference To: MSVBVM50.rtcMidCharVar, Ord:0278h
|
:00413298 E835DFFEFF Call 004011D2
:0041329D 8D45B4 lea eax, dword ptr [ebp-4C]
:004132A0 50 push eax
:004132A1 8D45D8 lea eax, dword ptr [ebp-28]
:004132A4 50 push eax

* Reference To: MSVBVM50.__vbaStrVarVal, Ord:0000h
|
:004132A5 E82EDFFEFF Call 004011D8
:004132AA 50 push eax

* Reference To: MSVBVM50.rtcAnsiValueBstr, Ord:0204h
|
:004132AB E82EDFFEFF Call 004011DE
:004132B0 0FBFC0 movsx eax, ax <-- 此处循环依次取你的序列号
:004132B3 898568FFFFFF mov dword ptr [ebp+FFFFFF68], eax
:004132B9 8D4DD8 lea ecx, dword ptr [ebp-28]
:004132BC DB8568FFFFFF fild dword ptr [ebp+FFFFFF68]<--依次将你的各个序列号的值放入
:004132C2 DC4DE0 fmul qword ptr [ebp-20]< --[ebp-20]的初值为定值2,依次乘以
你的第n个序列号的ascii码的十进制。
:004132C5 DD5DE0 fstp qword ptr [ebp-20]

* Reference To: MSVBVM50.__vbaFreeStr, Ord:0000h
|
:004132C8 E8FFDEFEFF Call 004011CC
:004132CD 8D45B4 lea eax, dword ptr [ebp-4C]
:004132D0 50 push eax
:004132D1 8D45C4 lea eax, dword ptr [ebp-3C]
:004132D4 50 push eax
:004132D5 57 push edi

* Reference To: MSVBVM50.__vbaFreeVarList, Ord:0000h
|
:004132D6 E8EBDEFEFF Call 004011C6
:004132DB 83C40C add esp, 0000000C
:004132DE 03F3 add esi, ebx
:004132E0 EB89 jmp 0041326B

假设我们的序列号为4位，如：a1 a2 a3 a4则：上述计算式为：
a1*2*a3*a4=s ：其中：a1,a2...都是Ascii码的十进制。
计算完后，由:0041326F jg 004132E2 处跳出，把S放入ebp-20送入:004132E2处进行计算。

在第二段00413329 处，计算为：
[(S/10)/(6780496716)]＊3=72

经过计算：s= 1627319211840
*************************************************************************
a1*a2*a3*a4*....*a(n)=s/2=813659605920 其中：a1,a2...都是Ascii码的十进制。
这是该程序的序列号计算式.
*************************************************************************
打个比方：假如序列号是1234；
则：49*50*51*52...=s/2后，程序就注册成功。

要反推出序列号还真不容易，我试了一下没推算出来。（序列号不限于数字，只要是可见的ascii就可）


VB3.0的程序

各位高手，VB3.0的程序如何破解？

标 题:找到注册码了 (2千字)
发信人:郭大志
时 间:2000-6-13 22:34:00
详细信息:

用bpx hmemcpy设断点，然后再用BPR断点监视你输入的注册码，它将你输入的注册码字符串转换成整数之后，
就到了如下的地方，要装到浮点寄存器中去了（又是浮点数！）：

5187:9067 53 PUSH BX
5187:9068 90 NOP
5187:9069 DD06C00D FLD REAL8 PTR [0DC0] //装入到浮点寄存器中去
5187:906D E86807 CALL 97D8
5187:9070 5B POP BX
5187:9071 58 POP AX
5187:9072 803ED00D1A CMP BYTE PTR [0DD0],1A
5187:9077 7504 JNZ 907D
5187:9079 883ED00D MOV [0DD0],BH
5187:907D E8A4F0 CALL 8124
5187:9080 CD3D INT 3D
5187:9082 5F POP DI
5187:9083 C3 RET
5187:9084 55 PUSH BP
5187:9085 8BEC MOV BP,SP
5187:9087 56 PUSH SI
5187:9088 B42C MOV AH,2C
5187:908A 9AD9884701 CALL KERNEL!DOS3CALL

单步跟踪，发现最终在如下FCOMPP的地方进行注册码的比较。此时ST1寄存器中放的是你输入的假注册码，
ST0中存放的是另外一个数。它会把你的假注册码和好几个数相比，这些数中有一个是真正的注册码，
其它的数不能用，否则启动的时候它会说你的文件被破坏了 :-)
只需要在如下的FCOMPP处插入INT 3指令即可，这里应为VB3比较两个数的地方。

4B57:3C00 FFE0 JMP AX
4B57:3C02 90 NOP
4B57:3C03 D9C9 FXCH ST(1)
4B57:3C05 90 NOP
4B57:3C06 DED9 FCOMPP //比较注册码
4B57:3C08 90 NOP
4B57:3C09 DFE0 FSTSW AX
4B57:3C0B CD3D INT 3D
4B57:3C0D 9E SAHF
4B57:3C0E C3 RET
4B57:3C0F 2800 SUB [BX+SI],AL
4B57:3C11 B82600 MOV AX,0026
4B57:3C14 B8A600 MOV AX,00A6
4B57:3C17 E8E8FF CALL 3C02
4B57:3C1A B80000 MOV AX,0000
4B57:3C1D 7501 JNZ 3C20
4B57:3C1F 48 DEC AX
4B57:3C20 50 PUSH AX
4B57:3C21 26AD LODSW ES:
4B57:3C23 FFE0 JMP AX

一个可用的cowsense.INI文件：

[Registration]
SerialNumber=W401-9900558
UserName=zhuxiaohua
UserCompany=zhuchen
Key=80467949
OptionKey=850780
DataEntryMode=False
Chronid=313500
Version=

[File Parameters]
DataPath=
DataFileName=

[Settings]
TabStyle=Mac
ReportTitle=Cow Sense Sample Herd
ReportingYear=2000

[Options]
SystemDB=C:\temp\vb3\SYSTEM.MDA

标 题:VB3程序破解再总结 (1千字)
发信人:小牧童
时 间:2000-6-14 22:31:22
详细信息:

VB3程序破解再总结
１、 用字符比较
－ 开始运行ＶＢ３程序，输入假的序列号：
－ 切换到softice下，bpx hmemcpy 设断点
－ 按Ｆ５键返回应用程序，按注册确定键，将被softice中断
－ S 0030:0 Ｌ FFFFFFFF 8B,CA,F3,A6,74,01,9F92,8D,5E,08,E8,06
－ 在返回地址设断如: bpx 0030:807019ef do “d si”
－ 按F５将落在比较代码处
: 8BCA mov cx, dx
: F3A6 repz cmpsb ;<- 这里字符串被比较
: 7401 je 8CB6 ;
: 9F lahf
: 92 xchg ax,dx
: 8D5E08 lea bx, [bp+08]
－ 如发现输入的假序列号则下d es:di查看序列号
- 没有发现继续按F5
２、 用数值比较
－ 开始运行ＶＢ３程序，输入假的序列号：
－ 切换到softice下，bpx hmemcpy 设断点
－ 下WF开浮点监视窗
－ 按Ｆ５键返回应用程序，按注册确定键，将被softice中断
－ S 0030:0 Ｌ FFFFFFFF 90,DE,D9,90DF,E0,CD,3D,9E,C3
－ 在返回地址设断如: bpx 0030:805B5CA5
－ 按F５将至此
4B57:3C05 90 NOP
4B57:3C06 DED9 FCOMPP //比较注册码
4B57:3C08 90 NOP
4B57:3C09 DFE0 FSTSW AX
4B57:3C0B CD3D INT 3D
4B57:3C0D 9E SAHF
4B57:3C0E C3 RET
在浮点监视窗中将会出现注册码
－ 如没有继续按F5

感谢郭大侠及看雪版主的帮助！


wintools5.0

 标 题:wintools5.0破解 (1千字)
发信人:看雪
时 间:2000-3-2 17:26:18
详细信息:
本篇文章只供学习交流之用。
方法一、用SOFTICE：
1、这是一VB5程序，在winice.dat装载：EXP=c:\windows\system\msvbvm50.dll；winNT用户需在setint配制。
2、下bpx__vbastrcmp,将中断，按F12走出此CALL，来到0137:0043617E（当然你一直跟进去也能找到序列号）
3、下BC * 清除其余断点，在0137:00436178设断，将中断如下：

0137:00436175 8B4DE8 MOV ECX,[EBP-18]
0137:00436178 51 PUSH ECX........中断于此，下 d ecx你输入的注册码
0137:00436179 688C944000 PUSH 0040948C
^^^^^^^^
d 40948c，正确的注册码
0137:0043617E FF1578E24300 CALL Near [`MSVBVM50!__vbaStrCmp`]...第2步的按F12回到此
0137:00436184 8BD8 MOV EBX,EAX
0137:00436186 8D4DE8 LEA ECX,[EBP-18]

4、这程序保护一般，大家想了解更多的Vb序列号破解，请关注网站的更新。

方法二、用SmartCheck
1、首先配制好SmartCheck；
2、装载wintools5.0，运行，一直到时wintools运行结束，在SmartCheck主窗口中，还不断有信息记录产生:
...........
Timer1_Timer
Timer2_Timer
...........
此时不管它，点击wintools注册，输入注册码，按OK后，再在SmartCheck下按红色的按钮停止程序的运行，最好快点，不然，还有许多没用的Timer1_Timer产生；
3、找一找：cmdOk_Click;展开它，
txtpassword.Text;光标移到这一行，点击菜单的"show all evants"
4、点击下面一行：
_vbastrcmp returns DWORD:FFFFF
看右窗口，哈哈，全在那！


家庭象册

求救：我想破解家庭象册这个软件，可始终不成功，请各位老师指点迷津。谢谢！！！

回复：

标 题:注册码很好找，用bpx __vbaStrCmp做断点即可，但是写注册机要花点功夫 (955字)
发信人:郭大志
时 间:2000-6-7 9:51:12
详细信息:

先加载MSVBVM60.DLL的符号表（最好不要同时加载MSVBVM50.DLL和MSVBVM60.DLL的符号表，否则断点应为bpx MSVBVM60!__vbaStrCmp），用bpx __vbaStrCmp设断点之后看见如下的指令段：

0167:00707F0C CALL 006FCE50 //计算注册号
0167:00707F11 MOV ECX,[EBP-18]
0167:00707F14 MOV EDX,[007320FC]
0167:00707F1A PUSH ECX //假注册号
0167:00707F1B PUSH EDX //正确的注册号
0167:00707F1C CALL [MSVBVM60!__vbaStrCmp]
0167:00707F22 TEST EAX,EAX
0167:00707F24 JNZ 007080A9

跟踪进 CALL 006FCE50则可以看见生成注册号的过程。根据程序指令可以证实微软的VB6程序确实是真正的EXE，跟用VC、Delphi等编译得到的EXE没有太大分别，而早期的VB4、VB3程序根本不能叫做真正的EXE程序。

另外，要写注册机的话最好先用SmartCheck看一下生成注册码的大致流程，然后再用SoftICE跟。困难在于微软没有公布MSVBVM50.DLL中的函数接口，所以该DLL中的函数的作用和参数都要靠猜。


平安全息万年历

 标 题:如何破“平安全息万年历”这个VB5的软件。内有下载地址。 (119字)
发信人:1212
时 间:2000-6-26 21:24:21
详细信息:
主页地址：
http://202.104.139.244/forum/toye/2000.html
下载地址：
http://soft2.gz168.com/luminan/pub/paqxwnl.exe

标 题:初步结果 (655字)
发信人:1212
时 间:2000-6-27 9:40:06
详细信息:

用程序编号的偶数位和注册号码的奇数位组成一个十进制数，再乘以2，用乘
积作为下标去查表（查表用的是函数rtcMidBStr，用bpx rtcMidBStr do "d *(esp+4)"
可以看见表格，即传递给该函数的第一个参数是表格的首地址，
第二个参数是下标）。由于程序编号和注册号码均为8位，故这样总共可以从表中查到4个字节。
再从其它地方得到4个字节（这4个字节是如何得到的尚未完全搞清楚），
总共得到8个字节， 用__vbaStrComp( )将这8个字节和另外的8个字节（这
8个字节是如何得到的也没搞清楚，随程序编号的不同而不同）相比较，
如果相同则注册成功。我曾经修改__vbaStrComp( )的返回值强行注册成功，
但是启动的时候检查通不过，它又生成一个新的程序编号让我再注册。
p-code形式的VB程序也不好patch :-(

标 题:我位仁兄已破了它，它有两个文件必须一一对应，改任一个文件均会要求重新注册。一个在安装目录下，一个在WI... (140字)
发信人:backboy
时 间:2000-6-27 17:09:39
详细信息:

标题: 我位仁兄已破了它，它有两个文件必须一一对应，改任一个文件均会要求重新注册。一个在安装目录下，一个在WINDOWS目录下。（无内容）

内容:

标 题:程序编号的生成 (156字)
发信人:1212
时 间:2000-6-27 10:36:11
详细信息:

生成程序编号好像根据的是如下文件的时间：
c:\windows
c:\program files\xxxxx(乱码，可能是“平安全息万年历”）
注册码似乎放在这里：
c:\windows\benjitzm.txt


bulk emailer

 标 题:这是用vf遍的，我用Sice拦不住！ (152字)
发信人:笨狗狗知秋
时 间:2000-6-17 19:38:56
详细信息:
这儿好热闹呀~~真是个好地方。软件在这里下载，是个bulk emailer http://www.internetmarketers.net/ipl/ea98nl.exe

我用Sice拦不住！
大家帮帮我！！
谢了

标 题:本人不懂VF,我把它UNFOX,请VF高手分析。 (44千字)
发信人:mmxm
时 间:2000-6-19 17:18:43
详细信息:

略

标 题:判断时间的 (479字)
发信人:郭大志
时 间:2000-6-19 18:36:33
详细信息:

很显然，下面的一段代码是判断时间的，时间藏在注册表中，45天后就不能用了。安装时间放在HKEY_CURRENT_USER\'Software\MSWin0MS08Z\ihex1中。

LCDATE = O.GETVALUE(-2147483647,'Software\MSWin0MS08Z','ihex1','')
DO CASE
CASE EMPTY(LCDATE)
WITH O
.SETVALUE(-2147483647,'Software\MSWin0MS08Z','ihex1',SYS(1))
ENDWITH
CASE DATE() - CTOD(SYS(10,VAL(LCDATE))) > 45
WITH O
.SETVALUE(-2147483647,'Software\MSWin0MS08Z','ihex1','2415750')
ENDWITH

标 题:比较注册的过程 (1千字)
发信人:小牧童
时 间:2000-6-20 23:43:44
详细信息:

以下是比较注册码的过程：

注册码“Ｓ“必须为１６位且前两位为“ET“,“EP“,“ES“,“ER“,“ED“之一，前两位决定了你注册的类型是标准的还是超级的等。
实用的注册码如下：
S:ES01234567891234
A:2431415542075383

S:EP01234567891234
A:4860757235651113

S:ET01234567891234
A:0983717441260851

S:ED01234567891234
A:2685502731111191

S:ER01234567891234
A:6144637450459665

*------
PROCEDURE CKID
GCVERSION = 'not'
IF LEN(ALLTRIM(GCNSERIAL)) = 16 AND LEN(ALLTRIM(GCNAUTH)) = 16 AND ;
SUBSTR(GCNSERIAL,1,2) $ 'ET,EP,ES,ER,ED' ******此处比较Ｓ和Ａ是否为１６位字符且Ｓ的首位是否为“ＥＴ．ＥＰ等******
IF GCNAUTH = PADL(SYS(2007,'3' + GCNSERIAL),5,'0') + PADL(SYS(2007,'5' + GCNSERIAL),5,'0') + ;
PADL(SYS(2007,'7' + GCNSERIAL),5,'0') + ;
SUBSTR(SYS(2007,'1' + GCNSERIAL),1,1) ******这里进行比较*****
IF SUBSTR(GCNSERIAL,1,2) = 'ET'
GCVERSION = 'tmp'
ENDIF
IF SUBSTR(GCNSERIAL,1,2) = 'EP'
GCVERSION = 'pro'
ENDIF
IF SUBSTR(GCNSERIAL,1,2) = 'ES'
GCVERSION = 'std'
ENDIF
IF SUBSTR(GCNSERIAL,1,2) = 'ER'
GCVERSION = 'rtl'
ENDIF
IF SUBSTR(GCNSERIAL,1,2) = 'ED'
GCVERSION = 'opt'
ENDIF
ENDIF
ELSE
GCVERSION = 'not'
ENDIF
IF GCVERSION <> 'not'
DO SETOPTIONS
DO CKVOID
ENDIF
RETURN GCVERSION
ENDPROC
*------

有了源程序找注册码很简单，在ＶＦ６命令窗口中就可以完成。做一个注册机如下"ＶＦ"的：
PROCEDURE CKID
GCNSERIAL="ES01234567891234" *****这里你可以自已修改
GCNAUTH = PADL(SYS(2007,'3' + GCNSERIAL),5,'0') + PADL(SYS(2007,'5' + GCNSERIAL),5,'0') + ;
PADL(SYS(2007,'7' + GCNSERIAL),5,'0') + ;
SUBSTR(SYS(2007,'1' + GCNSERIAL),1,1)
messagebox (GCNAUTH )
ENDPROC


ACDSee3.0

 标 题:ACDSee3.0和ASPACK (3千字)
发信人:SillyBird
时 间:2000-6-22 13:28:26
详细信息:
初学破解,一点心得,希望与大家交流.
破解ACDSee3.0如下:

使用TRW找到ACDSee!.ASPACK的最后地址为:5554CC
相关为：
005554B6 89 85 5C 2E 44 00 mov dword ptr [ebp+442E5Ch],eax
005554BC 61 popad
005554BD 75 08 jne 005554C7
005554BF B8 01 00 00 00 mov eax,1
005554C4 C2 0C 00 ret 0Ch
005554C7 68 DF 32 4A 00 push 4A32DFh
005554CC C3 ret
mov dword ptr [ebp+442E5Ch],eax将dword ptr [5554C8]从0改到4A32DF

ACDSee!.TEXT第一条指令为:
004A32DF 55 push ebp
004A32E0 8B EC mov ebp,esp
004A32E2 6A FF push 0FFh
004A32E4 68 A8 69 4D 00 push 4D69A8h
004A32E9 68 80 81 4A 00 push 4A8180h

做以下修改:
1.修改5554B6为,RawAddress = 864B6（文件中静态地址）
005554B6 E9 15 A1 01 00 jmp 0056F5D0

2.修改5550FD为,RawAddress = A05D0
0056F5D0 89 85 5C 2E 44 00 mov dword ptr [ebp+442E5Ch],eax
0056F5D6 BB 30 71 41 00 mov ebx,417130h
0056F5DB C7 03 B8 01 00 00 mov dword ptr [ebx],1B8h
0056F5E1 BB 34 71 41 00 mov ebx,417134h
0056F5E6 C7 03 00 C3 90 90 mov dword ptr [ebx],9090C300h
0056F5EC BB EA 3F 43 00 mov ebx,433FEAh
0056F5F1 66 C7 03 EB 17 mov word ptr [ebx],17EBh
0056F5F6 E9 C1 5E FE FF jmp 005554BC

3.其中417130使About弹出信息为注册
原来是:
00417130 33 C0 xor eax,eax ;返回0认为没有注册
00417132 C3 ret
00417133 90 nop
00417134 90 nop
00417135 90 nop
00417136 90 nop
改后为:
00417130 B8 01 00 00 00 mov eax,1 ;返回1认为已经注册
00417135 C3 ret
00417136 90 nop

4.433FEA使软件不过期
原来是:
00433FEA 6A 00 push 0
00433FEC 68 10 40 43 00 push 434010h
00433FF1 50 push eax
00433FF2 68 07 04 00 00 push 407h
00433FF7 51 push ecx
00433FF8 FF 15 A4 E7 4C 00 call dword ptr ds:[4CE7A4h]
00433FFE 48 dec eax
00433FFF F7 D8 neg eax
00434001 1B C0 sbb eax,eax
00434003 40 inc eax
00434004 C3 ret
改后为:
00433FEA EB 17 jmp 00434003 ;跳过过期对话框
00433FEC 68 10 40 43 00 push 434010h
00433FF1 50 push eax
00433FF2 68 07 04 00 00 push 407h
00433FF7 51 push ecx
00433FF8 FF 15 A4 E7 4C 00 call dword ptr ds:[4CE7A4h]
00433FFE 48 dec eax
00433FFF F7 D8 neg eax
00434001 1B C0 sbb eax,eax
00434003 40 inc eax
00434004 C3 ret

按照这种思路，基本上破解任何加壳的软件都不需要使用专门的脱壳软件。仅仅在壳对本体程序代码解密完成后，做JMP或CALL到自己代码，将相关的代码修改成自己想要的，然后再回到原来代码执行，就能完成任务。在ACDSee3.0的.text块的属性是可写的,所以不会产生写错误。

跳过过期画面的处理参考baoleigz的《也谈ACDSee V3.0破解》。


Advanced Administrative Tools v 4.0a

标 题:手工脱壳 Advanced Administrative Tools 4.0a (8千字)
发信人:cloudnumber9
时 间:2000-6-6 16:38:39
详细信息:

下载： http://newhua.myrice.com/down/aat40a.zip

手工脱壳 Advanced Administrative Tools 4.0a

作者 ：Cloud Number 9
Email : cloudnumber9@sina.com
版权声明：本文可自由转载和引用，但请勿用于商业目的。转载时请保持完整。
写作目的：我已很久没有破解软件，在偶然的机会里看到了一些看学学苑的脱壳教程，
随即顺手找了这个软件练习一下。没想到竟碰上一个大难题，足足用了我
一个星期的时间。我先用 ProcDump 的 script 脱掉了壳，后来发现不能
运行，随后又看了很多文章，敖了好多夜，才最后解决这个问题。
我想，cracker 的精神就是共享软件、共享知识、共享快乐和骄傲。
这也就是我写作本文的唯一目的。
写作日期：新世纪的第一个端午节，6th June, 2000.

脱壳软件：AATools 4.0a build 4.0.0.596
文件大小: 752,128 bytes
软件功能：我没太注意，只为练习脱壳。
发行公司：G-lock software, http://www.glocksoft.com
脱壳日期：June 3rd, 2000

破解环境：Windows Me (English Version), MMX 200, 64M.
使用工具：Trw2000 V1.21, ProcDump 1.6.2, topo, UltraEdit 7.0, W32dsm89.
---------------------------------------------------------------------------

首先用 ProcDump 看一下 AATools.exe 的 PE 头。
Entry Point : 00222001
Size of Image : 00239000
Image Base : 00400000

现在运行 trw2k, 起始代码如下：
--------- AATOOLS!.data -----------------------
:00622001 60 PUSHA
:00622002 E801000000 CALL 00622008
:00622007 90 NOP

按 F8 跟踪，只见这程序费劲了心思、不断的在内存中动态生成代码，
从.data 转换到一段段无名的空间，最后终于变换到 .CODE, 出现下列代码：
--------- AATOOLS!.CODE+1754C0 -----------------------
:005764C0 55 push ebp
:005764C1 8BEC mov ebp, esp
:005764C3 83C4F4 add esp, FFFFFFF4
:005764C6 53 push ebx
:005764C7 B8705E5700 mov eax, 00575E70
:005764CC E8CF0EE9FF call 004073A0
:005764D1 8B1D84A85700 mov ebx, dword ptr [0057A884]

经过不断试验，确定此时程序已完全脱壳。cs:5764c0 就是程序的新入口点。
由于我没有注册的 trw2k, 所以手工脱壳，
E CS:EIP EB FE 90
G
然后运行 ProcDump 脱壳。文件大小应为 2135K.
（如果将 ProcDump 中的 rebuild new import table 选项选中的话，脱壳后的文件
大小为 2138K, 同用 script 脱壳的大小一样）

这时 PE 头变为：
Name Virtual Size Virtual Offset Raw Size Raw Offset
CODE 00176000 00001000 001755B8 00000600
DATA 00004000 00177000 00003B30 00175C00
BSS 00002000 0017B000 00000000 0017B000
.idata 00004000 0017D000 00000B04 00179800
.tls 00001000 00181000 00000000 00181000
.rdata 00001000 00182000 00000010 0017A400
.reloc 00019000 00183000 00000000 0017A600
.rsrc 00086000 0019C000 00085BD0 0017A600
.data 00016000 00222000 000158AC 00200200
.data 00001000 00238000 00000000 00215C00

将脱壳后文件中的 EB FE 90 改回 55 8B EC，然后将 Entry Point 改为 1764C0.
但此时文件还是不能运行。

再通过 trw2k 跟踪，
:004073A0 50 push eax
:004073A1 6A00 push 00000000
:004073A3 E8F8FEFFFF call 004072A0
:004073A8 BA00715700 mov edx, 00577100
:004073AD 52 push edx
:004073AE 8905DCB45700 mov dword ptr [0057B4DC], eax
:004073B4 894204 mov dword ptr [edx+04], eax
:004073B7 C7420800000000 mov [edx+08], 00000000
:004073BE C7420C00000000 mov [edx+0C], 00000000
:004073C5 E88AFFFFFF call 00407354
:004073CA 5A pop edx
:004073CB 58 pop eax
:004073CC E827C8FFFF call 00403BF8
:004073D1 C3 ret

其中：
:0057D1C0 00 00 00 00 00 00 00 00 00 00 00 00 8C 54 3B 01
:0057D1D0 98 54 3B 01 A4 54 3B 01 B0 54 3B 01 BC 54 3B 01

:004072A0 FF25E4D25700 jmp dword ptr [0057D2E4]

在 cs:0057d2e4 数据为:
:0057D2E0 14 57 3B 01 20 57 3B 01

cs:013b5720 处代码为:
:013B5720 E9C91FBBBE JMP KERNEL32!GetModuleHandleA
:013B5725 1000

:013B572C E99E1FBBBE JMP KERNEL32!GetModuleFileNameA
:013B5731 1000

继续跟踪会发现一段特别的代码：
:004013D0 FF258CD25700 jmp dword ptr [0057D28C]

在 cs:0057d28c 数据为：
:0057D28C C4 56 3B 01

:013B56C4 68CE563B01 PUSH DWORD 013B56CE
:013B56C9 E8720F2CFF CALL 00676640
:013B56CE EB2F

从 PE 头可知，cs:57d000 - cs:57d000 + b04 为 idata 的数据，
可见从 cs:57d1cc 开始为 first_thunk 库, 而 cs:013bxxxx 为跳转表。
（我不知道专门的术语，请指正）
再跟踪 CALL 00676640, 发现这是一段解码程序，在很多地方都被调用。
而且其内部用了很多硬码，如：
mov dword ptr [0067xxxx], eax
call 0066xxxx
push 0066xxxx

通过 PE 头可知：
Size of Image : 00239000
Image Base : 00400000
所以程序所占地址空间为 00400000 - 00639000。
可见 00676640, 013bxxxx 都是申请的空间，超出了程序的地址空间，
脱壳后都不会被保存。

这种加壳方法非常难以恢复，以至我已几乎失去信心。

经过几天的实验和摸索，终于找到解决方法。
简单讲，就是扩展脱壳后的程序地址空间，然后将上述地址中的数据移回。
我将保存 0066 和 0067 段，将 013b 段保存到 0069 段。
（一开始我将 013b 改到 0064 或 0065， 后来发现不行，浪费了很多时间）

具体步骤如下：
---------------------------------------------------------------------------
1、重新脱壳：（必须手动，因为 script 无法存下 ）
bpx 5764c0
1.1 Start AATools
1.2 Interrupted by Trw2k
1.3 Quit AATools

重复运行 1.1 - 1.3，直到 cs: 013b56c9 为 call 0067xxxx.
(0068 或 0069 占用空间太多，运气好的话有可能为 0066)

下面以 call 00676640 为例，
键入下列命令：
W cs:00664000 L1e000 0066.bin
W cs:013b0000 L8000 013b.bin
W cs:00640000 L200 0064.bin
E cs:eip EB FE 90
G
然后再用 ProcDump 脱壳，假设存为 aa.exe。
将 aa.exe 中的 EB FE 90 改回 55 8B EC. Entry Point 改为 1764c0.
经过观察，动态申请的006X 内存段大小为固定的 1E000 大，013b 为 8000。
00676640 和 00664000 的偏移好像是固定的（请自试之）。
0064 段是后来跟踪时发现的。

---------------------------------------------------------------------------
2、用 topo, 在aa.exe 中加入大小为 458822 的段，这时 PE 头变为：
Name Virtual Size Virtual Offset Raw Size Raw Offset
CODE 00176000 00001000 001755B8 00000600
DATA 00004000 00177000 00003B30 00175C00
BSS 00002000 0017B000 00000000 0017B000
.idata 00004000 0017D000 00000B04 00179800
.tls 00001000 00181000 00000000 00181000
.rdata 00001000 00182000 00000010 0017A400
.reloc 00019000 00183000 00000000 0017A600
.rsrc 00086000 0019C000 00085BD0 0017A600
.data 00016000 00222000 000158AC 00200200
.data 00001000 00238000 00000000 00215C00
.topo0 00070046 00238000 00070200 00215C00

Size of Image : 2c,b000

这时，.topo0 中就有了 00660000 - 006A0000 的空间。

---------------------------------------------------------------------------
3、使用 UltraEdit 7.0 改换地址。

3.1 将 .idata 段的所有 013b 改为 0069。
（最好先从aa.exe 中抽出存入 idata.bin 中）

3.2 将 013b.bin 中的地址改换。
如
:013B5720 E9C91FBBBE (3.2.1) JMP KERNEL32!GetModuleHandleA
:013B5725 1000
如果 013B 移为 0069 的话，应为
:00695720 E9C91F8DBF
:00695725 1000
而
:013B56C4 68CE563B01 (3.2.2) PUSH DWORD 013B56CE
:013B56C9 E8720F2CFF (3.2.3) CALL 00676640
:013B56CE EB2F
改为
:006956C4 68CE566900 PUSH DWORD 006956CE
:006956C9 E8720FFEFF CALL 00676640
:006956CE EB2F

具体实施如下：
3.2.1 从 be ac 开始，一直到 be bf， ( be ad, be ae, ..., be bb, ... be bf )
将 ac be 10 改为 7e bf 10
将 bf be 10 改为 91 bf 10
013b 0069 ( 0069 + 00d2 == 013b )
be ac -> bf 7e (2 places)
...
be bb -> bf 8d
...
be bf -> bf 91 (1 place)
（由于我漏改了一处 be ac, 程序总是抛出个Exception, 说 Imagelist1.Bitmap
调用出错，以至于我调试了很久、很久...很久）

3.2.2 将所有的 013b 改为 0069

3.2.3 将 2c ff, 2b ff 改为 fe ff, fd ff
013b 0069 ( 0069 + 00d2 == 013b )
ff 2c -> ff fe
ff 2b -> ff fd

3.3 改动 0066.bin，将0067:d800 后所有 013b 改为 0069。
经过跟踪发现，程序在 0067:d800 - 0067:d9a0 处还有一段 import table 数据。
好在数据已保存在 0066.bin 中了。
（如果地址不同的话，我估计偏移量应该相同，00664000 - 0067d800 ）

---------------------------------------------------------------------------
4、用 UltraEdit 恢复 aa.exe。
Raw Offset Virtual Offset Copy Size
0021,5c00 0063,8000
0021,dc00 0064,0000 200
0023,dc00 0066,0000 1,e000
0026,dc00 0069,0000 8000

按照相应的位置和大小，将 0064.bin, 0066.bin, 013b.bin 拷贝到 aa.exe 中。

---------------------------------------------------------------------------
5、至此程序已完全脱壳，运行无误。
但我发现只能在 Windows Me 下运行，不能在 Win2k Pro 运行。（同机不同硬盘）
另外，在 PWin98, 16M 机器上也不能运行。
我只能接触到这两种机器，其他的请自试验。
估计是要改正 PE 头，使之能够在 NT 下运行。

---------------------------------------------------------------------------
6、总结：
据网友说AATools 用的是一种新的 Asprotect , 此种保护实在是非常难于脱壳。
经过我的实践，相信我的方法基本上已经可以解掉此类加壳方式。
Cracking 其实没有什么神秘之处，只要知道了基本方法，剩下的只是耐心和毅力。

另：一开始我用的是 trw2k v1.21，后来刚好碰上新出的 v1.22。
新版本稳定多了，非常好用。只可惜还是要提示，注册费也太贵。不爽而破之。:-p

-全文完-


mmxbricksht

 标 题:这个软件真可恶!大家都来看看吧! (127字)
发信人:十三少
时 间:2000-6-10 22:36:45
详细信息:
这是一个游戏程序，即防ICE又防TRW，而且还加了壳，我真是拿它没办法!
软件下载：http://go.163.com/~szycool/crackme/mmxbricksht.zip

标 题:普通的Asprotect保护，你用TRW2000前先：faults off。Import表就在idata里：464000.你也可按我以前的方法定... (159字)
发信人:看雪
时 间:2000-6-10 23:29:11
阅读次数:66
详细信息:

普通的Asprotect保护，你用TRW2000前先：faults off。Import表就在idata里：464000.你也可按我以前的方法定位，得到结果一至。今天我要休息，到此为止。

标 题:代码是动态变化的，每次都不一样。另外你自己还需要dump取正确的Import表替换旧的才行。 (2千字)
发信人:看雪
时 间:2000-6-11 10:55:35
详细信息:

前面的代码每次不一样，你只能以机器码和后面的指令来参考。

:bpx loadlibrarya

0137:005693D8 EB13 JMP 005693ED
0137:005693DA E9A907FFFF JMP 00559B88
0137:005693DF 66B80E00 MOV AX,000E
0137:005693E3 E814F2FFFF CALL 005685FC
0137:005693E8 E80709FFFF CALL 00559CF4
0137:005693ED 8B4508 MOV EAX,[EBP+08]
0137:005693F0 8D4818 LEA ECX,[EAX+18]
0137:005693F3 8B4508 MOV EAX,[EBP+08]
0137:005693F6 8B10 MOV EDX,[EAX]
0137:005693F8 8B4508 MOV EAX,[EBP+08]
0137:005693FB 8B401C MOV EAX,[EAX+1C]
0137:005693FE E881F7FFFF CALL 00568B84—————进去
0137:00569403 5F POP EDI
0137:00569404 5E POP ESI
0137:00569405 5B POP EBX
0137:00569406 59 POP ECX
0137:00569407 59 POP ECX
0137:00569408 5D POP EBP

来到：
0137:005652CC 61 POPAD
0137:005652CD EB01 JMP 005652D0
0137:005652CF E850EB02E9 CALL E9593E24
0137:005652D4 17 POP SS
0137:005652D5 E802000000 CALL 005652DC———进去
0137:005652DA E91758C35B JMP 5C19AAF6
0137:005652DF 59 POP ECX
0137:005652E0 59 POP ECX
0137:005652E1 5D POP EBP

来到：
0137:0045FA1C 55 PUSH EBP—————入口点
0137:0045FA1D 8BEC MOV EBP,ESP
0137:0045FA1F 83C4F4 ADD ESP,FFFFFFF4
0137:0045FA22 53 PUSH EBX
0137:0045FA23 B87CF84500 MOV EAX,0045F87C
0137:0045FA28 E83765FAFF CALL 00405F64
0137:0045FA2D 8B1D7C0F4600 MOV EBX,[00460F7C]
0137:0045FA33 8B03 MOV EAX,[EBX]
0137:0045FA35 E8EA58FEFF CALL 00445324
0137:0045FA3A 8B03 MOV EAX,[EBX]
0137:0045FA3C BA00FB4500 MOV EDX,0045FB00
0137:0045FA41 E80255FEFF CALL 00444F48
0137:0045FA46 8B0DAC0E4600 MOV ECX,[00460EAC]

标 题:重建Import表的一些步骤提示： (413字)
发信人:看雪
时 间:2000-6-17 12:24:23
详细信息:

程序入口地址：0045fa1c
需要重建import表 RAV:00064000

先用bpx loadlibrarya do "dd*(esp+4)"
两三下后，数据区显示为KERNEL32.DLL
此时dump取Import表。
w 64000 l 3000

来到入口点0045fa1c dump取整个程序。
然后用 Procdump打开这个程序，看到idata的RAW office=60400 RAW size=221c
用Hex Workshop打开刚dump的Import表，选取大小221c.替换到主程序的60400处，大小221c,并修正Import表的值为64000
这样程序完全可运行。


The Bat! 1.39 by:冰毒

 标 题:The Bat! 1.39脱壳笔记 (1千字)
发信人:冰毒
时 间:2000-3-12 9:04:01
详细信息:
1. 主程序的脱壳

014F:00990B35 8B10 MOV EDX,[EAX]
014F:00990B37 8B4508 MOV EAX,[EBP+08]
014F:00990B3A 035018 ADD EDX,[EAX+18]
014F:00990B3D 8B4508 MOV EAX,[EBP+08]
014F:00990B40 8B401C MOV EAX,[EAX+1C]
014F:00990B43 E880F9FFFF CALL 009904C8 <-这里! F8进入

014F:009904C8 89C4 MOV ESP,EAX
014F:009904CA 89D0 MOV EAX,EDX
014F:009904CC 8B1D34569900 MOV EBX,[00995634]
014F:009904D2 89041C MOV [EBX+ESP],EAX
014F:009904D5 61 POPAD
014F:009904D6 50 PUSH EAX <-记下EAX的值(61C528)
014F:009904D7 C3 RET <-这里用Procdump脱壳

2. 获得完整的.idata section

如上得到的脱壳后的程序,在你改过EIP后仍无法运行. 还有工作要做,你得用Icedump.

014F:009909FF 8B4508 MOV EAX,[EBP+08]
014F:00990A02 8D4824 LEA ECX,[EAX+24]
014F:00990A05 8B4508 MOV EAX,[EBP+08]
014F:00990A08 8B500C MOV EDX,[EAX+0C]
014F:00990A0B 8B4508 MOV EAX,[EBP+08]
014F:00990A0E 8B4008 MOV EAX,[EAX+08]
014F:00990A11 E8FAF6FFFF CALL 00990110
014F:00990A16 33C0 XOR EAX,EAX <-这里!
014F:00990A18 5A POP EDX
014F:00990A19 59 POP ECX
014F:00990A1A 59 POP ECX
014F:00990A1B 648910 MOV FS:[EAX],EDX
014F:00990A1E EB13 JMP 00990A33

在00990A16行, Pagein D 62e000 3000 c:\thebat.bin

3. 运行Hex编辑程序,用完整的.idata替换掉脱壳后主程序中.idata部分. Job done.


The bat! 139 by Icebird

 标 题:Thebat!139脱壳详情及对Asprotect加壳保护的一点小结 (4千字)
发信人:baoleigz（Icebird)
时 间:2000-3-27 21:43:38
详细信息:
Thebat!139脱壳详情及对Asprotect加壳保护的一点小结

小弟本想脱thebat141的壳的，但小弟下载的thebat141却没有加壳，没办法，还是拿thebat139开刀了。

如果小弟下面的内容有错漏的地方，请给小弟指正。

小弟的脱壳方法和冰毒的不同，他的方法我用不了，我用Procdump32脱不了thebat的壳。

废话少说，let's go!

所用工具：soft-ice405、icedump6015、procdump1.6.2、ultraedit5.0。

首先加载softice，再加载icedump。运行procdump32，点击PE Editor，选择thebat.exe

文件，我们要记一下数据了：size of image:00314000 image base:00400000，

点击sections，记下.idata的数据：virtual siza:00003000 virtual offset:0022E000 ，这样我们

可以知道.idata在内存中的地址为：0062E000，长度为：3000

启动Symbol Loader，载入thebat.exe（加载过icedump后，softice可以成功拦截thebat)，点击一下Load，

马上被拦截，如下：

XXX:006FF001 PUSHAD **第一个PUSHAD指令**

XXX:006FF002 CALL 006FF008 按F8进入

XXX:006FF007 NOP

XXX:006FF008 POP EBP 按F10一直来到：

XXX:006FF0D6 CALL 006FF0DE 按F8进入

在这之后的一段程序要走的小心一点，我建议用F8，如果离开了thebat的就按一下F12，然后再按F8，

一直来到：

XXX:006FFA3B PUSHAD **第二个PUSHAD指令** 改按F10一直来到：

XXX:006FFB6C POPAD **和第二个PUSHAD指令是一对**

XXX:006FFB6D POP EBP

XXX:006FFB6E RET 0008 这个CALL走完了，来到：

XXX:006FF09F MOV ECX，EAX 按F10来到：

XXX:006FF0D6 CALL 006FF0DE 按F8进入，然后一直按F10来到：

XXX:006FFA3B PUSHAD **第三个PUSHAD指令** （难道又回去了？当然不是。）按F10直到：

XXX:006FFB6C POPAD **和第三个PUSHAD指令是一对**

XXX:006FFB6D POP EBP

XXX:006FFB6E RET 0008 走完这个CALL来到：

XXX:006FF1D3 PUSH 04

XXX:006FF1D5 PUSH 00001000 按F10一直到：

XXX:006FF218 CALL 006FF220 按F8进入，之后按F10一直到：

XXX:006FF2A2 CALL 006FF2AA 这里开始一直按F8，如果离开了thebat，就按一下F12，再按F8来到：

XXX:0099E001 PUSHAD **第四个PUSHAD指令** F10一直来到：

XXX:0099E5C5 POPAD **和第四个PUSHAD指令是一对**

XXX:0099E5C6 JNP 009E5D0

XXX:0099E5C8 MOV EAX,00000001

XXX:0099E5CD RET 000C

XXX:0099E5D0 PUSH 00990B60

XXX:0099E5D5 RET 终于走完了这个CALL，来到这里：

XXX:00990B60 PUSH EBP 按F10来到：

XXX:00990B8A CALL 00983DC4 F8进入，F10来到：

XXX:00990956 CALL 009904F4 F8进入，F10来到：

XXX:00990A11 CALL 00990110

XXX:00990A16 XOR EAX，EAX （这里和冰毒一样，我可省了不少时间:-)）

这里下： PAGEIN D 62E000 3000 D:\IDATA.BIN 得到完整的.idata部分

继续F10来到：

XXX:00990B43 CALL 009904C8 F8进入，来到这里：

XXX:009904D5 POPAD **和第一个PUSHAD指令是一对**

XXX:009904D6 PUSH EAX

XXX:009904D7 RET （这里冰毒用Procdump32脱壳。可以吗？我怎么不行？谁可以就教教我。）

走完这里来到：

XXX:0061C528 PUSH EBP

来到这里后Soft-Ice中显示着‘THEBAT！CODE+0021B526’，有‘CODE’的字样，我们可以知道thebat是

用Broland写，成的,而且我们已经进入了主程序，可以脱壳了。

下： PAGEIN D 400000 314000 D:\THEBAT.EXE 得到脱壳后的thebat.exe文件

用ultraedit5.0打开thebat.exe及idata.bin，将idata.bin的内容替换到thebat.exe的22E000--230FFF中。

这样得到的程序还不能用，启动Procdump32修改文件Sections。

将每一项Section的 Raw Size ==> Virtual Size ； Raw Offset ==> Virtual Offset

将程序入口改成：0021C528（61C528-400000=21C528）

我记得冰毒说这样脱壳的程序不行，当然了！因为他漏了最重要的一步（趁冰毒不在，说了他不少坏话，

大家可不要告诉他呦:-D）：

点击Procdump32中的 PE Editor-->Directory，将 Import Table 的值改成：0022E000

自此程序已脱壳成功，我们来小结一下：

小弟通过对几个用Asprotect加壳的软件脱壳，对Asprotect加的壳有的一定了解，发现了一点共有的特征，

用Asprotect加壳的软件会出现3到4对‘PUSHAD--POPAD’指令（用Aspack或Upx加壳的软件只会出现一对）

在走完这几对‘PUSHAD--POPAD’指令后，我们便进入到主程序了，可以开始脱壳。脱壳后的文件还要还

原PE文件头，要将完整的‘.idata’或‘.rdata’替换到脱壳后的文件中，至于到底是‘.idata’还是

‘.rdata’就要大家自己去判断了，最后修改文件的Sections、Entry Point、Import Table各项。这样也

就脱壳成功了。

baoleigz（暴雷）


aspack 2.1

 标 题:用 softice 脱 aspack 2.1 的壳 (7千字)
发信人:故我（KEN）
时 间:2000-4-2 20:50:53
详细信息:
工具: softice,procdump, SoftICE Backdoor Keeper, frogsice 0.43, icedump
SoftICE Backdoor Keeper 到这边抓
http://protools.exit.de/files/debuggers/ex-sibdk1.zip
他说这个应该是适合所有的 softice 版本,我用 softice 4.05 测试没问题

前言:

这个档案也是用 asprotect 保护的
此版的 asprotect 会检测 softice, 且还会用 int 3 去检测
只用 frogsice 是无效的, 因此要配合 SoftICE Backdoor Keeper
把ex-sibdk1 解开,放到 softice 的目录,运行他,他为去改 winice.exe
改完了再重开机,就可以 下 bpint 3 了
若没有运行这个,下 bpint 3 是拦不到 int 3 的
还有一点,这个程序,未进入 OEP 之前
地址每次运行都会变,所以我写的地址,当然叶丝谕你的不一样
这个要注意的.

ok, go!!

1: 先用 procdump 观看一下 aspack,
size of image 是 0007A000
image og base 是 00400000
看一下 section
.idata 的 visual offset 是 46000
这个应该是放 import table 的地方

2: 运行 frogsice,还有icedump, 按 ctrl-d 进入 softice, 下 bpint 3
就是要拦截 int 3, 因为有运行过
运行 aspack2.1
aspack2.1 会检测 sice 和 ntice
sice 要去欺骗他, ntice 不要欺骗他,不然会当机
到了拦截 int 3 时 , 就是这边,下 e eip 0
故意让他生成例外.在下 bpm 446000
为什么要下 446000 ? 是因为 400000+46000 = 446000

014F:004D2AD5 CC INT 3 ; 光标停在这边
014F:004D2AD6 EB02 JMP 004D2ADA
014F:004D2AD8 E9025DEB02 JMP 033887DF
014F:004D2ADD E9FF33C05A JMP 5B0D5EE1
014F:004D2AE2 59 POP ECX
014F:004D2AE3 59 POP ECX
014F:004D2AE4 648910 MOV FS:[EAX],EDX
014F:004D2AE7 EB0A JMP 004D2AF3
014F:004D2AE9 E9121AFFFF JMP 004C4500
014F:004D2AEE E8791BFFFF CALL 004C466C
014F:004D2AF3 8A154C8F4D00 MOV DL,[004D8F4C]
014F:004D2AF9 8B45F4 MOV EAX,[EBP-0C]

3:
下完了 bpm 446000 , 不要按 F10 或 F8, 直接按 F5,
按 四次 F5,仔细看一下 ds:446000 的下方, 此时 import table 应该是
正确的 import table 了, 可以 dump 出来了,
用 icedump 来 dump, 下 pagein d 446000 2000 c:\temp\aspack.import
名字可以自定.

再按 2 次 F12,按第一次 F12 会等约10~20 秒才回到 softice
我也不知道为什么
按完了两次, 会到这边

014F:004BEDB4 33C0 XOR EAX,EAX
014F:004BEDB6 5A POP EDX
014F:004BEDB7 59 POP ECX
014F:004BEDB8 59 POP ECX
014F:004BEDB9 648910 MOV FS:[EAX],EDX
014F:004BEDBC EB13 JMP 004BEDD1 ; 若过期了,当到了这边可下
r eip 004BEE50 (当然,我的地址一定和你的地址不一样)

014F:004BEDBE E96914FFFF JMP 004B022C
014F:004BEDC3 66B80D00 MOV AX,000D
014F:004BEDC7 E870F1FFFF CALL 004BDF3C
014F:004BEDCC E8C715FFFF CALL 004B0398
014F:004BEDD1 33C0 XOR EAX,EAX
014F:004BEDD3 55 PUSH EBP
014F:004BEDD4 68F1ED4B00 PUSH 004BEDF1
014F:004BEDD9 64FF30 PUSH DWORD PTR FS:[EAX]
014F:004BEDDC 648920 MOV FS:[EAX],ESP
014F:004BEDDF 8B4508 MOV EAX,[EBP+08]
014F:004BEDE2 E80DFCFFFF CALL 004BE9F4 ; 会跑出过期的消息,
014F:004BEDE7 33C0 XOR EAX,EAX
014F:004BEDE9 5A POP EDX
014F:004BEDEA 59 POP ECX
014F:004BEDEB 59 POP ECX
014F:004BEDEC 648910 MOV FS:[EAX],EDX
014F:004BEDEF EB13 JMP 004BEE04
014F:004BEDF1 E93614FFFF JMP 004B022C
014F:004BEDF6 66B81100 MOV AX,0011
014F:004BEDFA E83DF1FFFF CALL 004BDF3C
014F:004BEDFF E89415FFFF CALL 004B0398
014F:004BEE04 33C0 XOR EAX,EAX
014F:004BEE06 55 PUSH EBP
014F:004BEE07 683DEE4B00 PUSH 004BEE3D
014F:004BEE0C 64FF30 PUSH DWORD PTR FS:[EAX]
014F:004BEE0F 648920 MOV FS:[EAX],ESP
014F:004BEE12 B83CDF4B00 MOV EAX,004BDF3C
014F:004BEE17 50 PUSH EAX
014F:004BEE18 8B4508 MOV EAX,[EBP+08]
014F:004BEE1B 8B4810 MOV ECX,[EAX+10]
014F:004BEE1E 8B4508 MOV EAX,[EBP+08]
014F:004BEE21 8B5004 MOV EDX,[EAX+04]
014F:004BEE24 8B4508 MOV EAX,[EBP+08]
014F:004BEE27 8B00 MOV EAX,[EAX]
014F:004BEE29 E80AF6FFFF CALL 004BE438
014F:004BEE2E A2305D4C00 MOV [004C5D30],AL
014F:004BEE33 33C0 XOR EAX,EAX
014F:004BEE35 5A POP EDX
014F:004BEE36 59 POP ECX
014F:004BEE37 59 POP ECX
014F:004BEE38 648910 MOV FS:[EAX],EDX
014F:004BEE3B EB13 JMP 004BEE50
014F:004BEE3D E9EA13FFFF JMP 004B022C
014F:004BEE42 66B80E00 MOV AX,000E
014F:004BEE46 E8F1F0FFFF CALL 004BDF3C
014F:004BEE4B E84815FFFF CALL 004B0398
014F:004BEE50 8B4508 MOV EAX,[EBP+08] SS:006AFE14=00465C57
014F:004BEE53 8D4818 LEA ECX,[EAX+18]
014F:004BEE56 8B4508 MOV EAX,[EBP+08]
014F:004BEE59 8B10 MOV EDX,[EAX]
014F:004BEE5B 8B4508 MOV EAX,[EBP+08]
014F:004BEE5E 8B401C MOV EAX,[EAX+1C]
014F:004BEE61 E85EF6FFFF CALL 004BE4C4 ; 按 F8,追进去
014F:004BEE66 5F POP EDI
014F:004BEE67 5E POP ESI
014F:004BEE68 5B POP EBX
014F:004BEE69 59 POP ECX
014F:004BEE6A 59 POP ECX

在 cs:014F:004BEE61 CALL 004BE4C4
追进去之后, 就可以看到 POPAD
PUSH EAX ; 此时 eax = 442238
CALL xxxxxxxx ; 按 F8 追进去

所以 OEP 是 442238
看要用 icedump 或是 procdump 来 dump 都可以
dump 完了之后
把刚刚的 import table 的信息覆盖到不正确的 import table
用 procdump 去改刚刚 dump 出来的 exe
改 Entry point = 42238 , Import table 的 RVA = 46000,
若是用 icedump dump 的,
还要多一个步骤
把 所有的 section 的
PSize = VSize
offset = RVA
改完了,应该就没问题了,也没有过期了, 检测 softice 了


NetAlert v2

 标 题:破解NetAlert v2 [热点] 指导如何自动脱壳！！ (4千字)
发信人:DDXia
时 间:2000-3-16 17:59:52
详细信息:
最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。
破解NetAlert v2 （转载希望保持完整）

级别：入门级++-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]

[热点] 指导如何自动脱壳！！

软件名称：NetAlert
整理日期：2000.3.15
最新版本：2.1
文件大小：590KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    软件可以保护您的系统免受黑客破坏，当有机器试图连接您的机器的指定端口时，该软件会发出警告，并让您选择忽略或继续。

http://www.newhua.com.cn/down/nasetup.zip

这几天一直在破解一个小游戏，是俄罗斯人编的，注册方式真的很棒，始终找不到真正的切入点，破解它，说实话，就象打《仙剑奇侠传》那样，给我过了足瘾，连踩车的时候，都在想如何和它周旋，现在已经打到最后一关大迷宫，我猜可能是一个矩阵游戏，有N个出口，不知道哪一个是真的，曾经想放弃过N次，每次都说再看一眼，反而总是有新的发现。总让我有难舍难弃的感觉，哭笑不得。哈哈哈。。。（也许是当局者迷，可能是经验不足，毕竟阿拉是入门不久的菜鸟级选手[嘻嘻 终于听到一句真心话了，难得 难得]。）

转入正题：安装完后，运行，有30天的限制。怎么办。Let's register it! 拿出我入门法宝W32DASM，装入，等啊，盼啊，居然没有反应。中邪了。
不用着急，其实是。。。。。。。。。。。。猜一猜。：（

再想想，其实是C了，在本文结尾有解释（Sorry，只是想大家都开动一下脑筋），如何办？？？？那就看一看谁C它的吧，工具很多，每一个CRACKER的主页里都有，我看的结果是被UPX 0.82--0.84 C了。手工脱壳我可是一点都不在行。不过，早就听说有一款自动脱壳的工具----PRODUMP，赶紧去DOWN，不错，还是让我找到一个PROCDUMPV1.6.zip，行了我也知足。

[使用方法]
1、运行PRODUMP，看到它的右边有几个按钮。
2、单击“UNPACK”，选UPX（因为它是UPX C的），选择目标程序NA.EXE。
3、过不久就出现“Please hi OK when task is loaded(check TaskBar)” ，要注意了，当NA.EXE出现在工 具条时，再单击‘OK’。
4、再过30秒（我这部老牛车比较慢），它会选一个文件名进行保存，存为NA1.EXE（任意） 。
5、然后会出现“Process Successfully unpacked :) (EIP 0x004E73FD)” 其中有一个SUCCESS的单词我认 识。（一定要认得这单词哦---成功）。
6、运行NA1.exe，哇噻！！！！真是厉害，运行成功。
7、脱壳也不需要很深的功力嘛！！（这小子，挺狗屎的，不想一想，如果没有老一辈CRACKER的心血，哪有 你用的份，对了，对了，还要感谢，老妈把我生下来了，对，还有我老爸，当然了，还有许许多多的幕 后英雄）

该拿出我的保留节目-----W32DASM，LOAD ，啊 出错，再LOAD，啊 又出错！真没办法。

中国人的金箍棒---------TRW2000。

1、装入NA1.EXE LOAD Ctrl+N（继续运行）
激活注册窗口，填入：Name : DDXia
REG Code: 123456789
Activate date : 987654321
2、Ctrl+N
3、BPX HMEMCPY
4、click "register now"
5、中断
6、BD * -----------》可要记得哦！
7、PMODULE
8、然后闭着眼睛， 按F10，可以休息一下眼睛嘛，毕竟CRACK太花眼力了。（阿拉的眼睛一边是0.8 一边是0.1 ，不过，还好了，不是斗鸡眼 ：））
9、终于跳出了注册失败的框。
10、确定。回到如下代码：
015F:00483781 MOV DL,02
015F:00483783 MOV EAX,004838E4
015F:00483788 CALL 0043BD28------------》这一定是跳出了注册失败的子程序
015F:0048378D JMP 0048389B ----------》光标停在这里
怎么办！往上看：
015F:0048374A MOV EAX,[EBX+000001E8]
015F:00483750 CALL 0041FB98
015F:00483755 MOV EAX,[EBP-14]
015F:00483758 LEA EDX,[EBP-10]
015F:0048375B CALL 004070D0
015F:00483760 MOV EAX,[EBP-10]
015F:00483763 LEA EDX,[EBP-0C]
015F:00483766 CALL 00407104
015F:0048376B MOV EAX,[EBP-0C]
015F:0048376E MOV EDX,[EBP-08]
015F:00483771 CALL 00403E08------------>这一定是比较罗！
015F:00483776 JZ 00483792------------>关键所在。
015F:00483778 PUSH 00000000
015F:0048377A MOV CX,[004838D8]
015F:00483781 MOV DL,02
015F:00483783 MOV EAX,004838E4
015F:00483788 CALL 0043BD28------------>跳出了注册失败的子程序
015F:0048378D JMP 0048389B
015F:00483792 PUSH 00000000
015F:00483794 MOV CX,[004838D8]

11、这里可以改JZ 00483792----》JMP 00483792，本想收工。但。。。。。
015F:0048376B MOV EAX,[EBP-0C]
015F:0048376E MOV EDX,[EBP-08]
D EAX --------我的注册码：123456789
D EDX --------好长串阿拉拜数字。（猜一猜，对了，是正确的注册码）
5018C86F6E0CE23437FAD1C5DB2DF15B----->really long!
12、这么长串的数字，抄下来吗？？？不，我好懒的，嘻嘻^_^
13、幸好是用中国人的软件，中国人的自豪。可以DOWNLOAD 某处内存到文件里。
TIPS: D range(范围) > filename
15、然后粘贴。OK！！！！！！收工。

完成时间
2000.3.16中午
费时一个中午没有睡：）

标 题:再战NetAlert v2 （手动脱壳）上 (1千字)
发信人:DDXia
时 间:2000-3-19 10:57:05
详细信息:

最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。
再战NetAlert v2 （手动脱壳）上（转载希望保持完整）

级别：入门级++-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]

[热点] 指导如何手动脱壳！！

软件名称：NetAlert
整理日期：2000.3.15
最新版本：2.1
文件大小：590KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    软件可以保护您的系统免受黑客破坏，当有机器试图连接您的机器的指定端口时，该软件会发出警告，并让您选择忽略或继续。

http://www.newhua.com.cn/down/nasetup.zip

在看雪论坛里看到冰毒下的英雄贴，用力的尝试一把，发现老对不上胃口，功力还是比较菜。于是去看了几篇脱壳的文章（看雪和TRW2000的主页里有），忍不住拿NETALERT来开刀，（Soory Netalert作者）。

使用TRW2000
1、装入NA1.EXE LOAD
2、按F8单步执行-------------准备好笔和纸哦！！：）
3、该程序有许多的跳转-------有时会令人头晕脑涨。
4、最终的目的--------------》》可要牢记------》找到跳转到新段落的地方，
比如 代码执行在30：4E77A9 突然JUMP到 30：448866
也就是说当程序解压完后，会跳到解压程序执行，其中就会有一个跳转。
到现在看见的跳转主要表现为以下两种形式：

POPAD ----------》POP一个新的地址
RET ------------》跳转
----------------------------------------------------
JUMP 新的段 ------------》这个大该、也许、可能比较好理解吧！

5、有了目标，做什么都会有动力的。LET'S TRACK!!

6、Sorry，就到此吧！如果真的很想学脱壳化！那就动手吧！然后把追到的跳转地址记下，
在下辑中会继续的。：）

完成时间
2000.3.19 10:56

标 题:再战NetAlert v2 （手动脱壳）下 (3千字)
发信人:DDXia
时 间:2000-3-19 11:40:11
详细信息:

最先最先得感谢TRW2000的作者朱楠灏和刘涛涛。
再战NetAlert v2 （手动脱壳）下（转载希望保持完整）

级别：入门级++-----前辈们请指点。
作者：丁丁虾 又名：DDXia [CCG]

[热点] 指导如何手动脱壳！！

软件名称：NetAlert
整理日期：2000.3.15
最新版本：2.1
文件大小：590KB
软件授权：共享软件
使用平台：Win95/98/NT
发布公司：Home Page
软件简介：
    软件可以保护您的系统免受黑客破坏，当有机器试图连接您的机器的指定端口时，该软件会发出警告，并让您选择忽略或继续。

http://www.newhua.com.cn/down/nasetup.zip

谜底可要、可要说了哦-----------------就就就是是----------015F:004E73FD 对了吗？？？喔，恭喜、恭喜。不对，没关系，继续努力，每一个人都会有很大的潜力的。

针对该程序，会有一个TIPS，就是

按F8单步执行，然后在代码栏中，使代码往下滚：就会发现：

015F:004E73AF PUSH EDX
015F:004E73B0 MOV ECX,EDI
015F:004E73B2 PUSH EDI
015F:004E73B3 DEC EAX
015F:004E73B4 REPNZ SCASB
015F:004E73B6 PUSH EDX
015F:004E73B7 CALL Near [`KERNEL32!GetProcAddress`]
015F:004E73BD POP EDX
015F:004E73BE OR EAX,EAX
015F:004E73C0 JZ 004E73C9
015F:004E73C2 MOV [EBX],EAX
015F:004E73C4 ADD EBX,00000004
015F:004E73C7 JMP 004E73A8

015F:004E73C9 POPAD-------------------------------------》这两句是不是很熟悉呢？？？上辑说的！
015F:004E73CA RET -------------------------------------》
采取的方法是 加载程序后 g 4E73CA------啊哦，，，，居然没有停止，就跳到 NA.EXE 中了。说明没有执行到这句。

015F:004E73CB LEA EBX,[ESI-04]
015F:004E73CE ADD EDI,00000004
015F:004E73D1 XOR EAX,EAX
015F:004E73D3 MOV AL,[EDI]
015F:004E73D5 INC EDI
015F:004E73D6 OR EAX,EAX
015F:004E73D8 JZ 004E73FC
015F:004E73DA CMP AL,EF
015F:004E73DC JA 004E73EF
015F:004E73DE ADD EBX,EAX
015F:004E73E0 MOV EAX,[EBX]
015F:004E73E2 XCHG AH,AL
015F:004E73E4 ROL EAX,10
015F:004E73E7 XCHG AH,AL
015F:004E73E9 ADD EAX,ESI
015F:004E73EB MOV [EBX],EAX
015F:004E73ED JMP 004E73D1
015F:004E73EF AND AL,0F
015F:004E73F1 SHL EAX,10
015F:004E73F4 MOV AX,[EDI]
015F:004E73F7 ADD EDI,00000002
015F:004E73FA JMP 004E73DE
015F:004E73FC POPAD
015F:004E73FD JMP 00485F7C--------------------》这句是不是比上一个句子更。。更熟悉呢？？
采取的方法是 加载程序后 g 4E73FD------啊哦，，，，居然就停在这，没有跳 到NA.EXE 中了。好！！单步执行，接着就跳到485F7C----也就是解压程序开始。

NEXT，把它DUMP下来！可要用到TRW2000最最厉害的武器了！！！！！
PEDUMP-------闪亮登场。-----性能虽然有一些不稳定，但是但是，它的确非常的棒！我用的第一次死机，重启动后，再PEDUMP总算是把它给DUMP下来了。

然后，把它从TRW2000的目录中拷贝到NETALERT目录中，运行，靠！！！TRW2000真是伟大！不需要再对它修改，就可以正常运行了。

（END后语：写教程真的很累。不过，最痛苦的是这个星期，‘铹枕’两次，勃子真难受，幸好头还 可以转动，要不就惨了。
如果破解完，总觉得不把它写出来，真是一种资源的浪费！本人觉得就是有点不爽。）

完成时间
2000.3.19 11:36
耗时1个小时有10分（破解+讲解）


opt 0.99

 标 题:谁能脱 opt 0.99 的壳？ (199字)
发信人:fishs
时 间:2000-6-19 23:26:10
详细信息:
我用 typ3 检查的是 PECompact 1.23.2-1.24 fast，在 Procdump 里只有 PE Compact，用它脱壳却出现错误，怎么办？
软件下载：http://grc.com/files/optout.exe(31k)
无法下载的话我也可以发给他：fishs@china.com

标 题:问题解决，进来 (1千字)
发信人:看雪
时 间:2000-6-20 18:05:30
详细信息:

此程序是PECompact 压缩的，一般PECompact 压缩的程序找到入口点dump后，完全能正常运行，这程序也不例外，入口点OEP=1000，然后可用多种方法dump，在这推荐TRW2000中的makepe命令来脱壳，因为它能重建Import表，脱壳后的程序能夸平台运行，否则你用pedump脱的则只能在同一台机子运行或同一种操作系统下运行。当然你也可用 Procdump来脱，在option选项中选上“重建一个新的Import表”选项来脱，可达到同样的目的。

脱壳后程序能正常运行，只是其自校验，跳出对话，告知文件被破坏，不予运行。出现这种情况，你就crack这对话框，问题就解决了。

在这一例，脱壳后，用bpx messageboxa下断，具体如下：

0167:0040113D E8B8520000 CALL `KERNEL32!GlobalFree`
0167:00401142 0BDB OR EBX,EBX
0167:00401144 741E JZ 00401164——如此处可跳过下面的对话框，只要让其跳过即可
0167:00401146 6A00 PUSH BYTE +00
0167:00401148 68BB854000 PUSH DWORD 004085BB
0167:0040114D 68D9854000 PUSH DWORD 004085D9
0167:00401152 FF35389B4000 PUSH DWORD [00409B38]
0167:00401158 E88F510000 CALL `USER32!MessageBoxA` 此处跳出文件损坏的敬告窗口。


PELOCKnt v2.04壳

 标 题:哪位大侠能看看这个软件的壳。 (188字)
发信人:bo_zai
时 间:2000-5-14 21:57:33
详细信息:

http://www2.freeshine.com/macd/jsgj/downloads/znzdat3.macd 下载后将macd改为zip 530K中的znzmate.exe 不知是哪种软件给加的壳，太厉害了。只要加载了ICE或TRW2000就立刻当机，用ICE欺骗工具也不行。

答复：

用FileInfo查看是用PELOCKnt v2.04加的密，但到playtools站点下载PEUNLOCK-NT解密却不成功。

序 号:849
标 题:如何脱指南针的壳 (792字)
发信人:冰毒
时 间:2000-5-15 8:57:27
详细信息:

Znzmate.exe显然是用PELOCKnt 2.04加密的，但是用PEUNLOCK解密时却提示程序不是PELOCKnt加密的。因为PELOCKnt并无更新的版本，而UCF出的PEUNLOCK是可以对付所有版本的PELOCKnt的。事情便有些蹊跷。PEUNLOCK带有源程序，不妨研究一下:

cmp word ptr [PEheader+0f6h], 1000h ; check if its PELOCKNT-ed, this
jnz NoPELock ; is a propertary flag for PELOCK-NT

好的，用PELOCKnt加密一个小程序，在HEX编辑器中观察对比

Znzmate: 0000 0100 1010 5045 4C4F 434B 6E74 ......PELOCKnt
正常情况: 0000 0100 0010 5045 4C4F 434B 6E74 ......PELOCKnt

这就是程序作者的小花招。知道如何做了吗？把1010改成0010，存盘。再试着用PEUNLOCK解密，OK！不过程序还有第二层壳，用ASPACK 1.07b加的壳，用UnAspack可以自动脱壳，但脱壳后的程序运行时却出错。好在手动脱壳也很简单。用ProcDUMP脱壳并修改程序入口值即可。

--------------------------------------------------------------------------------


Professional Quest

 标 题:Professional Quest脱壳实例(vbox4.10)，可能很容易，难的我也不会:( (2千字)
发信人:shizg
时 间:2000-6-24 8:43:08
详细信息:
发信人: shizg (刀客☆永远的痛), 信区: Hacker
标 题: Professional Quest脱壳实例(vbox4.10)
发信站: BBS 水木清华站 (Fri Jun 23 10:10:12 2000)

这个东东以前就装了，是一个做问卷调查的软件。最近要用，所以拿出来一看，
哇塞，不能用了。然后加载S-Ice，再运行看，出来一个框，是什么vbox警告框，
意思是说我有debug，呵呵。知道是vbox保护了。
下面就是脱壳过程，想练手的可以照着做(找不到可以问我要)，好像上一次
有人问那个codevizor也是用vbox4.10保护的：

1。打S-Ice补丁，就是backdoor keeper，这样就不怕vbox不能脱壳弹出上面那个
框框了。如果用trw更爽，直接faults off命令，就可以了。

2。S-Ice加载执行程序quest.exe

3。中断在B53000：
015F:00B53000 PUSH DWORD PTR [ESP+0C]
015F:00B53004 PUSH DWORD PTR [ESP+0C]
015F:00B53008 PUSH DWORD PTR [ESP+0C]
015F:00B5300C PUSH 2B08AEB1
015F:00B53011 PUSH 2BBD9A3E
015F:00B53016 PUSH 2B08AAE1
015F:00B5301B PUSH 2B08AA1B
015F:00B53020 CALL [00B531F0]
015F:00B53026 PUSH FFFFFFFF
015F:00B5302B CALL EAX
015F:00B5302D RET 000C

4。单步执行到B5302B，此时eax=00B4E000，F8跟进，如下：
015F:00B4E000 PUSH DWORD PTR [ESP+0C]
015F:00B4E004 PUSH DWORD PTR [ESP+0C]
015F:00B4E008 PUSH DWORD PTR [ESP+0C]
015F:00B4E00C PUSH 0209AF7E
015F:00B4E011 PUSH FEF61153
015F:00B4E016 PUSH A509A770
015F:00B4E01B PUSH DEFA1690
015F:00B4E020 CALL [00B4E1D4]
015F:00B4E026 PUSH FFFFFFFF
015F:00B4E02B CALL EAX
015F:00B4E02D RET 000C

5。注意B4E020就是vbox用来判断是否过期、有debug的代码，如正常则解码，并
返回程序正确地址于Eax，此时eax=00913F34

6。到B4E02B跟进去，如下：
015F:00913F34 MOV [009E1F4C],ESP
015F:00913F3A XOR EBP,EBP
015F:00913F3C PUSH EBP
015F:00913F3D MOV EBP,ESP
015F:00913F3F CALL KERNEL32!GetVersion
015F:00913F44 MOV EDX,EAX
015F:00913F46 AND EDX,000000FF
015F:00913F4C MOV [009E1F40],EDX
015F:00913F52 MOV EDX,EAX
015F:00913F54 SHR EDX,08
015F:00913F57 AND EDX,000000FF
015F:00913F5D MOV [009E1F44],EAX
。。。
这就是解码后的程序啊。只需要将内存dump出来就可以。
dump方法比较多，我就用procdump来dump，选择full dump，并且在选项里面选择
rebuild新的import表，否则程序是不能运行的，因为找不到dll入口嘛，还执行
什么，呵呵。如果用trw2000，可以用makepe命令
7。最后一步，dump出一个文件，比如quest1.exe，必须修改程序入口地址，可以
用peedit，procdump，将入口地址改为前面跟得的地址，但要注意，该地址应是
00913F34-image的基址（00400000)＝00513F34
8。这就是一个脱过壳的执行文件了，运行不需要vbox库，当然过期什么都没有了，

那个干扰画面也没有了。

愿意的话，还可以写一个procdump的script，以后解vboxb410.dll的壳就不用这么
麻烦了。


狗的介绍

 标 题:谈到软件狗，我说几句 (1千字)
发信人:bgl
时 间:2000-5-8 21:18:35
详细信息:
值或一个标志。当然有时还得靠点灵感和运气。象autocad，德赛的archt

中望cad等等。都是这样。最近拿到了autocad14中文正式版光盘和autocad2000

中文正式版光盘。解开它其实不难，网上也有不少的破解档。但不彻底。

估计是对这个专业不熟。所以，如果对所解的软件的专业不熟就有点麻烦。尤其

是建筑及结构软件。

对于shell方式，我所见到的多半是外来软件，一是被代理商汉化，或被crack掉再

重新加密。破这类狗的确很麻烦，我曾经解过，但是有狗，追一阵子，就找到入口

了，很快就解开。现在当时的笔记也丢了。狗也没了，再试着追一遍，头昏眼花。

怎么也转不出来。我手有一个工程图纸矢量化软件vpmax，这个软件不便宜。

在国外它是不加密的，由于大恒公司对其作了汉化，就用sentinel的super shell对其

再加密，如果有狗，就直接用pd16就能脱壳。可惜我没有狗。

2以色列的hasp

hasp狗形式比较多，是我见到最厉害的狗，它也有外壳型。它的解密算法也很复杂

但是这要取决于软件保护人员如何用它来保护自己的软件，用的好，解起来十分头痛

象蒙泰rip软件，解起来十分容易，改掉一些判断就可以了。切割软件‘神雕98’也是

如此。看雪的关于解 狗的压缩包里都有例子，有些十分简单，有些就十分难。需要说明

的是，就算你按照例子去解，也不一定能解开，其中有一个软件casmate，这是以色列scanvec公司

的一个很有名的雕刻切割软件，不信，你试试。

3国产的sense3

据说这个狗十分厉害，象pkpm结构计算软件，分析家股票软件，园方cad软件，等等都是

用深思三代加的密，某一部分代码再狗中，没有狗就麻烦了

4 其他

其他一些杂牌狗也较多，但大多是吓人的。

（就说这么多，耽搁大家时间，原谅没有给出细节，最近一直被PB缠着，头疼。

有时间，就事论事，一一举例，于大家一起破狗）

BgL 2000-5-8


aLoNg3x

 标 题:DDXia主页crackme中的aLoNg3x的破解过程（难度：简单） (4千字)
发信人:cqzrd
时 间:2000-5-27 9:03:16
详细信息:
这次破的软件是DDXia主页（http://go.163.com/~ddxia/）中crackme中的aLoNg3x
（解压后名字为crackme100.exe )，有兴趣的同志可以去下一个来试试。
功能：无，专供练手。级别：1。
工具：TRW2000121。
步骤：
1、打开后在name框中输入大名，字母数必须>5个，原因在后面会讲到。
code框随便输入几个数即可。
2、bpx hmemcpy设断。F5 退出。
3、再随便输入一个数，TRW弹出。
4、pmodule返回程式空间。不断按F10，直到：
00442CE7 8D55F8 lea edx, dword ptr [ebp-08]
00442CEA 8B83E0020000 mov eax, dword ptr [ebx+000002E0]
00442CF0 E8CB05FEFF call 004232C0 --->获取name及其字数
00442CF5 8B45F8 mov eax, dword ptr [ebp-08]
00442CF8 50 push eax
00442CF9 8D55F0 lea edx, dword ptr [ebp-10]
00442CFC 8B83DC020000 mov eax, dword ptr [ebx+000002DC]
00442D02 E8B905FEFF call 004232C0 --->获取code
00442D07 8B45F0 mov eax, dword ptr [ebp-10]
00442D0A 5A pop edx
00442D0B E82CFDFFFF call 00442A3C --->***在此换F8切入。***
00442D10 84C0 test al, al --->若al=0则去死。
00442D12 740F je 00442D23

此处是call 00442A3C的内容：
015F:00442A3C PUSH EBP
015F:00442A3D MOV EBP,ESP
015F:00442A3F ADD ESP,BYTE -08
015F:00442A42 PUSH EBX
015F:00442A43 PUSH ESI
015F:00442A44 MOV [EBP-08],EDX
015F:00442A47 MOV [EBP-04],EAX
015F:00442A4A MOV EAX,[EBP-04]
015F:00442A4D CALL 00403BE8
015F:00442A52 MOV EAX,[EBP-08]
015F:00442A55 CALL 00403BE8
015F:00442A5A XOR EAX,EAX
015F:00442A5C PUSH EBP
015F:00442A5D PUSH DWORD 00442AE5
015F:00442A62 PUSH DWORD [FS:EAX]
015F:00442A65 MOV [FS:EAX],ESP
015F:00442A68 MOV EAX,[EBP-04]
015F:00442A6B CALL 00403A34
015F:00442A70 CMP EAX,BYTE +05 --->比较name长度是否>5。
015F:00442A73 JNG 00442AC8 --->若不大于则去死。
015F:00442A75 MOV EAX,[EBP-04]
015F:00442A78 CALL 00403A34
015F:00442A7D MOV EBX,EAX
015F:00442A7F MOV EAX,[EBP-04]
015F:00442A82 CALL 00403A34
015F:00442A87 MOV EDX,EAX
015F:00442A89 DEC EDX
015F:00442A8A TEST EDX,EDX
015F:00442A8C JNG 00442AAE
015F:00442A8E MOV EAX,01 --->EAX置1
015F:00442A93 MOV ECX,[EBP-04]
015F:00442A96 MOVZX ECX,BYTE [ECX+EAX-01] --->取name的第一个字母。
015F:00442A9B MOV ESI,[EBP-04]
015F:00442A9E MOVZX ESI,BYTE [ESI+EAX] --->取name的第二个字母。
015F:00442AA2 IMUL ECX,ESI —
015F:00442AA5 IMUL ECX,EAX |
015F:00442AA8 ADD EBX,ECX | 该段通过name换算出一个数num
015F:00442AAA INC EAX |
015F:00442AAB DEC EDX |
015F:00442AAC JNZ 00442A93 —
015F:00442AAE MOV EAX,[EBP-08]
015F:00442AB1 CALL 00407670 --->获取code并转为Hex放入EAX。
015F:00442AB6 SUB EBX,EAX
015F:00442AB8 CMP EBX,029A --->比较num与code之差是否为029A（666）
015F:00442ABE JNZ 00442AC4 --->若是，则OK按钮可用，否则去死。
015F:00442AC0 MOV BL,01
015F:00442AC2 JMP SHORT 00442ACA
015F:00442AC4 XOR EBX,EBX
015F:00442AC6 JMP SHORT 00442ACA
015F:00442AC8 XOR EBX,EBX
015F:00442ACA XOR EAX,EAX
015F:00442ACC POP EDX
015F:00442ACD POP ECX
015F:00442ACE POP ECX
015F:00442ACF MOV [FS:EAX],EDX
015F:00442AD2 PUSH DWORD 00442AEC
015F:00442AD7 LEA EAX,[EBP-08]
015F:00442ADA MOV EDX,02
015F:00442ADF CALL 004037DC
015F:00442AE4 RET

至此，破解过程完成。有趣的是在该段call内，有一个call（具体哪个我忘了）是判断输
入的code的第一个字母是数字异或是-、+、$、x、X、0等，若是则会有另一番判断过程。有兴
趣的同志可以自己进去看看。下面是我用TC2写的注册机：
main()
{char a[10];
int i,j,c;unsigned long k,b;
aa: printf("Please input your name:");
gets(a);
i=strlen(a); k=i;
if (i<6||i>10)
{printf("Length of your name must be in 6 and 10:\n");
goto aa;}
for (j=0;j<i-1;j++)
{ b=a[j];
c=a[j+1];
b=b*c*(j+1);
k=k+b; }
printf("Your code is: %ld\n",k-666);}

===============<完>=================


ACiD_BuRN2

标 题:到ddxia那里下载的ACiD_BuRN2的crackme不知在那入手？。 (空)
发信人:庐之小得味
时 间:2000-5-27 15:25:31

回复：

标 题:部分解决 (2千字)
发信人:冰毒
时 间:2000-5-28 1:48:39
详细信息:

运行程序,Nag显示几秒消失. 主界面出现. 输入Name,First name,Company项,面对注册码输入窗. 注册码分三段,随便填入几个数字,但是register的按钮是灰的. Hmm? 程序对输入的注册做实时比较. 只有注册码正确时,按钮才会生效.

问题是如何设断点. 试了好几个,找到一个好用的: bpx __vbar8str. 设断,F5. 马上弹回softice. 跟过一阵子,还是没有头绪. 不过,见到一些浮点运算操作指令. 于是试着下WF指令,打开浮点寄存器窗. 于是'演出开始了'.

不断地按F5,每次拦住时F12返回VB5的DLL,你就会在寄存器窗里见到一些数字, 其中有输入的注册码. 试着改变姓,名,公司名和注册码, 在softice下跟踪比较,发现有些数字是固定的: '444','777','111','27','5'. 而且数字的显示非常有规律. 先显示输入的注册码,然后一个两位数,再就是444或777或111,再就是27,接着清空. 再开始下一轮, 循环往复. 耐心分析一番以后,解决了. 不过, 去除Nag不成功,有些象WinRAM-Booster 2000的Nag. 不知哪位可以搞定. 另外作者提到的anti-smartcheck function因没装Smartcheck不能测试. 谁有兴趣,可以一试,并贴出结果.

以下是大致过程:
1. 输入 name: Break firstname: Ice company: China, Password:123 456 789
2. 切进softice, bpx __vbar8str 并下指令WF
3. F5, softice马上中断, F12, 此时ST0=123
4. F5, F12, 此时ST0=66 (name第一个字母的ASCII码值,10进制), ST1=123
5. F5, F12, 此时ST0=444 (Magic number), ST1=66, ST2=123
6. F5, 先不按F12, ST0=29304
7. F12, ST0=27 (今天是27号), ST1=29304, ST2=123
8. F10向下
<pre>
014F:0F0FDFCB FMULP ST(1),ST <- ST0*ST1=791208
014F:0F0FDFCD XOR EAX,EAX
014F:0F0FDFCF MOV AL,[ESI]
014F:0F0FDFD1 INC ESI
014F:0F0FDFD2 JMP NEAR [EAX*4+0F0FED94]
再向下
014F:0F0FD73B CALL `MSVBVM50!__vbaI4Str`
014F:0F0FD740 PUSH EAX <- 5 (本月月份)
014F:0F0FD741 XOR EAX,EAX
014F:0F0FD743 MOV AL,[ESI]
014F:0F0FD745 INC ESI

9. 继续F10

014F:0F0FE001 POP ECX <- 5 (月份)
014F:0F0FE002 POP EAX <- C12A8h=791208 (乘积)
014F:0F0FE003 CDQ
014F:0F0FE004 IDIV ECX <- EAX/ECX
014F:0F0FE006 PUSH EAX <- 158241
014F:0F0FE007 XOR EAX,EAX
014F:0F0FE009 MOV AL,[ESI]
014F:0F0FE00B INC ESI
.
.
014F:0F1065F1 CALL 0F0FEC1E <- F8进
014F:0F1065F6 JMP 0F0FEA9D
看到
014F:0F0FEC1E FXCH <- 交换ST0和ST1的值
014F:0F0FEC20 FCOMPP <- 比较
014F:0F0FEC22 FNSTSW AX
014F:0F0FEC24 TEST AL,0D
</pre>
10. Password的第2,3两部分算法一样, 只是Magic number分别为777和111.

重新输入: 158241 306293 40159 现在按钮可按了,Congratulation!

冰毒写于2000年5月27日


CORE的official crackme

 标 题:cracker们，有无兴趣玩玩这个crackme呀？挺有意思的 (110字)
发信人:dr0
时 间:2000-6-21 21:26:43
详细信息:
http://core.8bn.com/Download/cr-crack.zip

这是CORE的official crackme。记得一定要写注册机才算的，patch不算！

标 题:a essay (4千字)
发信人:dr0
时 间:2000-6-22 21:42:26
详细信息:

Reversing the CORE crackme
By Nolan Blender
Published by Tsehp Jan 9 2000

Since this program is a strainer, I'm not going to provide all the details on cracking this program. The general information that I will provide here may be helpful, however to build the required keygen you will still have to do the work yourself. This essay won't have too many specifics. I will discuss instead the strategies and thinking used to crack this program.

Description of the program
The CORE crackme is a 77k program written by Egis from the CORE cracking group. This program is a small crackme which one must keygen in order to gain a trial membership in that group.
The program is designed in a way that makes it infeasable to extract a key by repetitive trial, or "brute forcing". The program is packed as well, so the program must be unpacked. Until recently, procdump was unable to automatically unpack the program, however recent versions of procdump can handle this.

Icedump was used to dump the process at a point where the program had been unpacked, but before the import table had been processed. The address of the Import Address Table was restored, and the location of the import table fixed.

At that point, IDA could be used on the program, and a map file was created. MSYM and nmsym were used to build an NMS file for softice, and full debugging could begin.

After some careful analysis, it was determined that there were two algorithms at work. The first algorithm took the user name and passed it through a non reversable algorithm which appears to be a variation on MD5.

The second algorithm took the entered key, consisting of four 32 bit values, and produced a second set of four 32 bit values. The values were then compared against the output of the MD5 hash, and if they were the same, the test passed, otherwise it failed.

Since MD5 is a non reversible algorithm, it's not possible to guess a name for a particular key. Besides, a keygen should be able to take arbitrary input to generate a key. It follows that the key processing algorithm must be reversible, or a brute force approach is available.

Careful examination of the algorithm makes it clear that the algorithm can't be avoided by brute forcing the solution - the algorithm works on 64 bit blocks and does many iterations. The first two values are first processed, then 1 and 2, then 2 and 3. A brute force attack is not practical on a 64 bit key. What's more, each pass overlaps the results of the previous pass, so it's not possible to partition the problem.

Here's what the encryption main loop does.

for (i = 0; i < 3; i++)
{
val1 = 0x0badc0de;
val2 = val1 / (0x50 + i);
eg_encrypt(val2, &(arr1[i]));
}

A C emulation of this code section was written. It is easier to understand what is going on in C, so a reversing routine can be more easily written. Since the algorithm loops many times, the first part was to emulate what was happening for a single pass.

Reversing a single pass of the algorithm was the most time consuming part of this exercise, since it required making inferences about earlier values in the loop from later ones. There is a bit of trickiness going on in the encrypting routine, but the algorithm is fully reversible.

Once a single pass of the algorithm was completed, an algorithm which was the inverse of eg_encrypt was written. The decryption was run against the 128 bit output of the modfied MD5 algorithm, and a key was generated.

The hashing algorithm was ripped from the crackme, using IDA, modified to compile under nasm, and then linked against the code containing the decryption algorithm.

Many tools were used to crack this program. SoftICE 4.01 for debugging, IDA 4.01 for disassembly/map generation, nasm for code compilation, UltraEdit32 6.20 for code and object editing, procdump for editing the PE headers, and icedump to dump sections to disk. This is a good crackme to work on since many important cracker skills are exercised by this program. The algorithm is reversible, you must examine the program very carefully to see how it works at times.

Forward engineering tools were nasm to build the assembly code, and Microsoft Visual C++ 6.0 to build and link the keygen.

Special thanks to Miz, The Owl and VoxQuietis for their essays and assistance.

Sample output. To join CORE, you have to supply the keygen.

D:\ckeygen>ckeygen
Nolan Blender's CoRE crackme keygen 1.0 (12-dec-1999)
Enter your name:
Nolan Blender
Generating your key...
Your key is: 7CB89309 32029722 BFFCF6C4 AF7D6DE0

这篇文章是高手Nolan Blender写的，是个老外。另外，我觉得看英文很easy的，可能是我看英文破解文章太多的缘故 (dr0 ）


Derive 5 Trial

 标 题:Vbox 4.3脱壳实战 (2千字)
发信人:冰毒
时 间:2000-5-20 23:57:40
详细信息:
标题：Vbox 4.3脱壳实战

教程写作: 冰毒
作者信箱: break_ice@hotmail.com
写作日期: 2000年5月18日
版权声明: 转贴请保持完整

目标程序：Derive 5 Trial
程序网址：http://www.derive.com/
文件大小：文件包 2,936,029字节；主文件 Dfw.exe 1,192,384字节
使用工具：Softice 3.23; ProcDump 1.6.2 Final; FrogsICE 1.00 Final

引言

Vbox被认为是现今最强悍的加壳工具，不少商用软件借它加以保护。
Vbox 4.3是最新版本，防跟踪能力很强，对Cracker们提出了新的挑战。
不久前，dEZZY / Drink or Die写了一篇了不起的教程，提供了手动
除掉Vbox 4.3加壳保护的办法。dEZZY的原文可在http://go.to/tsehp
处下载。本文所用的方法，基本上和dEZZY描述的过程相同。只是本人
偷懒完全靠FrogsICE来对付Vbox的防Softice的手段。如果你的英语好，
本人劝你还是去读dEZZY的教程。本人这篇教程并无新意，不过拿一个
特定程序示范一下而已。Derive 5是个商业版的数学辅助软件，30天的
试用期。本人在网上见到有人问起它的破解，于是拿它试刀。

详细脱壳步骤

1. 安装目标程序Derive 5 Trial。重启，运行Softice。
2. 运行FrogsICE，除了默认的Options外，还要选中Force int3 hook和
Force int3 SEH两项。
3. 现在启动Derive 5,等待Nag窗口弹出。
4. 进入Softice。设断 bpx getprocaddress。
5. 回到Windows，按下Try按钮。Softice中断。
6. 按 1 次 F12，你会见到下面的代码。不过别忘了 bc* 清除断点。

015F:0700BB36 PUSH DWORD PTR [EBP-20]
015F:0700BB39 CALL [KERNEL32!GetProcAddress]
015F:0700BB3F MOV EDI,EAX <-- 我们在这里
015F:0700BB41 CMP EDI,EBX
015F:0700BB43 JZ 0700BCE6
015F:0700BB49 MOV ESI,[ESI+16]
015F:0700BB4C ADD ESI,[EBP+08]
015F:0700BB4F CMP [EBP-24],EBX
015F:0700BB52 JZ 0700BB89 <-- 这里下A命令，

把 jz 改成 jmp。非常关键，原因见dEZZY的教程。

8. F10 继续
9. 按 5 次 F12, 不多不少。第 1 次 F12要稍等一下才会被中断，别着急。^_^
光标前面一行是 CALL EDI
10. 设断 bpm edi x (参见FrogsICE的说明文件和Softice手册)。F5, Softice中断。
11. 一直按F10, 直到CALL 01640115 (在不同的机器和每次调试都可能不同，原则是
F10跳过，程序便会运行)
12. F8 追进这个CALL，按 F10 继续
13. 到来到 CALL EAX 时 (中间可能要设断跳过一个循环), 按 F10 跳过
14. 按 F10 直到 CALL 01640485 (同样在你的机器上可能会不同)
15. 小心按 F10 来到:

MOV EDX,[EBP-08]
MOV EAX,[EDX+14]
MOV [EBP-10],EAX
MOV EBX,[EBP-10]
JMP EBX <-- 程序入口。记下EBX=0048BA47

16. 当光标位于 JMP EBX 行时，下指令

a eip 回车
jmp eip 回车
回车

17. F5 离开Softice，回到Windows
18. 运行ProcDump，在 Options 中作以下设置:

选中 Structure 下的所有选项，在 Imports 项下，选中'rebuild new import table'。

19. Dump (full) Dfw.exe文件。存盘dump.exe
20. 用Procdump的PE Editor修改Entry Point的值为0008BA47。OK，保存文件。

现在，你有了一个解除了Vbox保护，可以无限期使用的程序了。:)

致谢: 感谢dEZZY的杰出教程。感谢SV，Hobgoblin和Tiamath给我的帮助。