<一> 摘要
software  : anonmail 1.30
home page : http://www.pnutsoftware.com
file name : 
reg_name  : yupie
reg_no    : 11676


<二> 缘起
这也是一个"号称"能丢匿名信的e-mail程式,用它来开开玩笑是不错,可别以为真能完全匿
名,不信先寄封e-mail给你自己再用mail程式看看它的header吧?所有的资料都在上头!另
外有许多mail server好像根本就不准用telenet port 25来发信?其实一些功能强的e-ma
il程式像becky mail也能做到相同的结果.未注册版无法改变你e-mail的header,注册版则
无限制.

<叁> 执行情形
(1)
载入soft-ice後执行anonmail,选择tools/register,在name处填入yupie,regstration #
填入1122334455,Ctrl-d进入soft-ice後下bpx hmemcpy指令,按F5回到注册画面,按下OK,
马上进入soft-ice.

(2)
bd *,按F12共15次後出现错误画面.

(3)
重覆1-2,这次按F12共14次,再来用F10去追.

(4)
0137:0F05A5C5  RET 0008
0137:00419D45  MOV EAX,EBX
0137:00419D47  JGE EAX,EBX
在
0137:00419D9C  MOV EDX,[EBP-1C]            ..... [EBP-1C]出现1234567890
在
0137:00419DAD  MOV EDX,[EBP-18]            ..... [EBP-18]出现yupie
0137:00419DB0  LEA EDX,[EBP-20]
0137:00419DB3  MOV [EBP-18],EBX
0137:00419DB6  CALL EDI
0137:00419DB8  LEA ECX,[EBP-24]            ..... 419DB8到419DBF是将reg_name,
0137:00419DBB  LEA EDX,[EBP-20]                  reg_no存入堆叠中
0137:00419DBE  PUSH ECX
0137:00419DBF  PUSH EDX
0137:00419DC0  CALL 00414BF0

0137:00419FDD  CALL [0041E238]             ..... 至此出现错误讯息

从上面可推测比对点应该是在00419DC0到00419FDD间.

(5)
重新再来一次,这次执行到00419DC0时,下"t"追下去看看
0137:00419DC0  CALL 00414BF0               ..... 下"t"

0137:00414BF0  PUSH EBP
0137:00414BF1  MOV EBP,ESP
一直到
0137:00414C30  MOV EAX,[EBX]               ..... [EBX]为reg_name

0137:00414C90  CALL [0041ED20]
0137:00414C96  IMUL AX,AX,07               ..... EAX=79h,刚好是y的ascii code
0137:00414C9A  JO 00414D9A                       从00414C96到00414CAB正是在计
算
0137:00414CA0  MOVSX ECX,AX                      注册码,将字母的ascii code乘7
放
0137:00414CA3  ADD ECX,EDI                       入ECX,总合则是放入EDI
0137:00414CA5  JO 00414D9A
0137:00414CAB  MOV EDI,ECX
0137:00414CAD  LEA ECX,[EBP-2C]
0137:00414CB0  CALL [0041E360]
0137:00414CB6  LEA EDX,[EBP-4C]
0137:00414CB9  PUSH EDX
0137:00414CBA  LEA EAX,[EBP-3C]
0137:00414CBD  PUSH EAX
0137:00414CBE  PUSH 02
0137:00414CC0  CALL [0041E1F0]
0137:00414CC6  ADD ESP,0C
0137:00414CC9  MOV EAX,00000001
0137:00414CCE  ADD AX,SI
0137:00414CD1  JO 0414D9A
0137:00414CD7  MOV ESI,EAX
0137:00414CD9  JMP 00414C49
0137:00414CDE  IMUL EDI,EDI,03             ..... 将EDI的值再乘以3
0137:00414CE1  JO 00414D9A
0137:00414CE7  MOV [EBP-28],EDI            ..... 最後的结果放入[EBP-28]

0137:00419DF7  CMP DI,BX

0137:00419E10  JZ 419F9D                   ..... 若JUMP则出现失败讯息

到这里可以看到注册码的计算方式,将你的reg_name字母一个个转换成ascii code,乘以7
放入[EDI]中相加之总合再乘以3,很简单吧?在00414CE7处你可以下"? EDI"指令将结果抄
下,这就是你的注册码.

(6)
重新打开arrow注册画面,填入yupie/11676完成注册.

<四> 结论

这是我第一个找到编码方式的程式,当然我的运气很好,它的编码十分的简单很适合新手去
研究,美中不足的是无法抓出比对的核心,最出在找注册码时一直以为它是十位数,所以也
浪费了不少时间,因为注册画面中是可以输入十位数,或许这是个陷阱吧.美中不足的事未
能找到比对的核心处,我花了不少时间但还是投降了,如果有人找到比对的关键点欢迎来信,

这次为了了解整个编码的方式,我还K了一些组合语言挺有意思的,以前常听一些高手说搞
破解是为了"练功",现在觉得所言不假.