不久前下载了天逸通用繁简转换工具,想用它来转换繁体,不想还要注册码。最近研究crackme,终于安下心破解了它!!并随意获得注册码!
破解过程我就不说了,下面是破解记录和说明。
破解了第一个软件,特地在此庆祝一下!
.text:00404080 sub_404080 proc near ; DATA XREF: .rdata:00406BB4o
.text:00404080
.text:00404080 var_204 = dword ptr -204h
.text:00404080 var_1A0 = dword ptr -1A0h
.text:00404080 var_160 = dword ptr -160h
.text:00404080 var_120 = dword ptr -120h
.text:00404080 var_D8 = dword ptr -0D8h
.text:00404080 var_D4 = dword ptr -0D4h
.text:00404080 var_D0 = dword ptr -0D0h
.text:00404080 var_CC = dword ptr -0CCh
.text:00404080 var_C8 = dword ptr -0C8h
.text:00404080 var_C4 = dword ptr -0C4h
.text:00404080 var_C0 = dword ptr -0C0h
.text:00404080 var_AC = dword ptr -0ACh
.text:00404080 var_10 = dword ptr -10h
.text:00404080 var_C = dword ptr -0Ch
.text:00404080 var_4 = dword ptr -4
.text:00404080
.text:00404080 push 0FFFFFFFFh
.text:00404082 push offset __ehhandler$?OnFilePrintSetup@CWinApp@@IAEXXZ
.text:00404087 mov eax, large fs:0
.text:0040408D push eax
.text:0040408E mov large fs:0, esp
.text:00404095 sub esp, 1F8h
.text:0040409B push esi
.text:0040409C mov esi, ecx
.text:0040409E push 1
.text:004040A0 call ?UpdateData@CWnd@@QAEHH@Z ; CWnd::UpdateData(int)
.text:004040A5 lea ecx, [esp+208h+var_AC]
.text:004040AC call registerbutton_403930
.text:004040B1 push 0
.text:004040B3 lea ecx, [esp+20Ch+var_204]
.text:004040B7 mov [esp+20Ch+var_4], 0
.text:004040C2 call sub_401360
.text:004040C7 push offset aJflib_dll ; "JFLib.dll"
.text:004040CC lea ecx, [esp+20Ch+var_10]
.text:004040D3 mov byte ptr [esp+20Ch+var_4], 1
.text:004040DB call ??4CString@@QAEABV0@PBD@Z ; CString::operator=(char const *)
.text:004040E0 push 0
.text:004040E2 mov ecx, esi
.text:004040E4 call ?UpdateData@CWnd@@QAEHH@Z ; CWnd::UpdateData(int)
.text:004040E9 mov eax, [esi+68h] ; 此值 XOR 292685575 等于客户号,他就是输入的注册码
.text:004040EC lea ecx, [esp+208h+var_AC]
.text:004040F3 push eax ; 6F
.text:004040F4 call compare_regcode_4031E0 ; 关键call
.text:004040F9 test eax, eax
.text:004040FB jnz short loc_404119
.text:004040FD push eax
.text:004040FE push eax
.text:004040FF push offset aRegisterSucces ; "Register Success!"
.text:00404104 mov dword ptr [esi+60h], 1
.text:0040410B call ?AfxMessageBox@@YGHPBDII@Z ; AfxMessageBox(char const *,uint,uint)
.text:00404110 mov ecx, esi
.text:00404112 call ?OnOK@CDialog@@MAEXXZ ; CDialog::OnOK(void)
.text:00404117 jmp short loc_40412E
.text:00404119 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00404119
.text:00404119 loc_404119: ; CODE XREF: sub_404080+7Bj
.text:00404119 push 0
.text:0040411B push 0
.text:0040411D push offset aRegisterErr ; "Register err!"
.text:00404122 call ?AfxMessageBox@@YGHPBDII@Z ; AfxMessageBox(char const *,uint,uint)
.text:00404127 mov dword ptr [esi+60h], 0
.text:0040412E
.text:0040412E loc_40412E:
关键call
compare_regcode_4031E0 proc near ; CODE XREF: sub_404080+74p
.text:004031E0
.text:004031E0 VolumeSerialNumber= dword ptr -0BCh
.text:004031E0 CC_FileHandle = dword ptr -0B8h
.text:004031E0 var_A8 = dword ptr -0A8h
.text:004031E0 var_84 = dword ptr -84h
.text:004031E0 var_4C = dword ptr -4Ch
.text:004031E0 var_C = dword ptr -0Ch
.text:004031E0 var_4 = dword ptr -4
.text:004031E0 arg_0 = dword ptr 4
.text:004031E0
.text:004031E0 push 0FFFFFFFFh
.text:004031E2 push offset unknown_libname_5 ; MFC 3.1/4.0/4.2/8.0 32bit
.text:004031E7 mov eax, large fs:0
.text:004031ED push eax
.text:004031EE mov large fs:0, esp
.text:004031F5 sub esp, 0B0h
.text:004031FB push esi
.text:004031FC mov esi, ecx
.text:004031FE lea ecx, [esp+0C0h+CC_FileHandle]
.text:00403202 call ??0CFile@@QAE@XZ ; CFile::CFile(void)
.text:00403207 push 0Ah ; nFileSystemNameSize
.text:00403209 push 0 ; lpFileSystemNameBuffer
.text:0040320B push 0 ; lpFileSystemFlags
.text:0040320D lea eax, [esp+0CCh+VolumeSerialNumber]
.text:00403211 push 0 ; lpMaximumComponentLength
.text:00403213 push eax ; lpVolumeSerialNumber
.text:00403214 push 0Ch ; nVolumeNameSize
.text:00403216 push 0 ; lpVolumeNameBuffer
.text:00403218 push offset RootPathName ; "c:\\"
.text:0040321D mov [esp+0E0h+var_4], 0
.text:00403228 call ds:GetVolumeInformationA
.text:0040322E mov edx, [esp+0C0h+VolumeSerialNumber]
.text:00403232 mov esi, [esi+9Ch]
.text:00403238 push 0
.text:0040323A xor edx, 11970118h
.text:00403240 push 8002h
.text:00403245 push esi
.text:00403246 lea ecx, [esp+0CCh+CC_FileHandle]
.text:0040324A mov [esp+0CCh+VolumeSerialNumber], edx
.text:0040324E call ?Open@CFile@@UAEHPBDIPAVCFileException@@@Z ; CFile::Open(char const *,uint,CFileException *)
.text:00403253 test eax, eax ; GetVolumeInformationA返回成功!
.text:00403255 pop esi
.text:00403256 jnz short loc_403288 ; 第一个比较,不跳转则注册失败
.text:00403258 lea ecx, [esp+0BCh+CC_FileHandle]
.text:0040325C mov [esp+0BCh+var_4], 0FFFFFFFFh
.text:00403267 call ??1CFile@@UAE@XZ ; CFile::~CFile(void)
.text:0040326C mov eax, 1
.text:00403271 mov ecx, [esp+0BCh+var_C]
.text:00403278 mov large fs:0, ecx
.text:0040327F add esp, 0BCh
.text:00403285 retn 4
.text:00403288 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00403288
.text:00403288 loc_403288: ; CODE XREF: compare_regcode_4031E0+76j
.text:00403288 push 2
.text:0040328A push 0FFFFFF64h
.text:0040328F lea ecx, [esp+0C4h+CC_FileHandle]
.text:00403293 call ?Seek@CFile@@UAEJJI@Z ; LONG Seek(LONG lOff,UINT nFrom);throw(CFileException);
.text:00403293 ; 如果要求的位置合法,则Seek返回从文件开始起的新字节偏移量
.text:00403293 ; lOff:指针移动的字节数。
.text:00403293 ; nFrom:指针移动的模式。可以是CFile::begin,CFile::current,CFile::end
.text:00403298 lea ecx, [esp+0BCh+var_A8]
.text:0040329C push 9Ch
.text:004032A1 push ecx
.text:004032A2 lea ecx, [esp+0C4h+CC_FileHandle] ; 存放输入注册码
.text:004032A6 call ?Read@CFile@@UAEIPAXI@Z ; CFile::Read(void *,uint)
.text:004032AB mov edx, [esp+192] ; 此值实际上就是文本框输入输入注册码,等于客户号 XOR 292685575
.text:004032B2 mov ecx, [esp+0BCh+VolumeSerialNumber] ; 堆栈 ss:[0012ECD4]=49E82E67
.text:004032B6 mov eax, edx
.text:004032B8 xor eax, 292685575 ; 把传入的值XOR 后跟系列号 比较
.text:004032BD cmp eax, ecx
.text:004032BF mov eax, [esp+0BCh+var_84] ; 49E82E67=1239952999 自动输入的客户号
.text:004032C3 jz short regsuccess_403329 ; 注册成功!
.text:004032C5 cmp eax, ecx
.text:004032C7 jz short regerror_4032F0 ; 注册失败
.text:004032C9 mov [esp+0BCh+var_84], ecx
.text:004032CD push 2
.text:004032CF push 0FFFFFF64h
.text:004032D4 lea ecx, [esp+0C4h+CC_FileHandle]
.text:004032D8 call ?Seek@CFile@@UAEJJI@Z ; CFile::Seek(long,uint)
.text:004032DD lea edx, [esp+0BCh+var_A8]
.text:004032E1 push 9Ch
.text:004032E6 push edx
.text:004032E7 lea ecx, [esp+0C4h+CC_FileHandle]
.text:004032EB call ?Write@CFile@@UAEXPBXI@Z ; CFile::Write(void const *,uint)
.text:004032F0
.text:004032F0 regerror_4032F0: ; CODE XREF: compare_regcode_4031E0+E7j
.text:004032F0 lea ecx, [esp+0BCh+CC_FileHandle]
.text:004032F4 call ?Close@CFile@@UAEXXZ ; CFile::Close(void)
.text:004032F9 lea ecx, [esp+0BCh+CC_FileHandle]
.text:004032FD mov [esp+0BCh+var_4], 0FFFFFFFFh
.text:00403308 call ??1CFile@@UAE@XZ ; CFile::~CFile(void)
.text:0040330D mov eax, 4
.text:00403312 mov ecx, [esp+0BCh+var_C]
.text:00403319 mov large fs:0, ecx
.text:00403320 add esp, 0BCh
.text:00403326 retn 4
.text:00403329 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00403329
.text:00403329 regsuccess_403329: ; CODE XREF: compare_regcode_4031E0+E3j
.text:00403329 cmp eax, ecx ; ecx=硬盘系列号
.text:0040332B jnz short loc_403333
.text:0040332D cmp [esp+0BCh+var_4C], edx
.text:00403331 jz short loc_403367 ; 跳往虽然成功但是没有写入注册码
.text:00403333
.text:00403333 loc_403333: ; CODE XREF: compare_regcode_4031E0+14Bj
.text:00403333 mov [esp+0BCh+var_84], ecx
.text:00403337 push 2
.text:00403339 push 0FFFFFF64h
.text:0040333E lea ecx, [esp+0C4h+CC_FileHandle]
.text:00403342 mov [esp+0C4h+var_4C], edx
.text:00403346 call ?Seek@CFile@@UAEJJI@Z ; CFile::Seek(long,uint)
.text:0040334B lea eax, [esp+0BCh+var_A8]
.text:0040334F push 9Ch
.text:00403354 push eax
.text:00403355 lea ecx, [esp+0C4h+CC_FileHandle]
.text:00403359 call ?Write@CFile@@UAEXPBXI@Z ; CFile::Write(void const *,uint)
.text:0040335E lea ecx, [esp+0BCh+CC_FileHandle]
.text:00403362 call ?Close@CFile@@UAEXXZ ; CFile::Close(void)
.text:00403367
.text:00403367 loc_403367: ; CODE XREF: compare_regcode_4031E0+151j
.text:00403367 lea ecx, [esp+0BCh+CC_FileHandle]
.text:0040336B mov [esp+0BCh+var_4], 0FFFFFFFFh
.text:00403376 call ??1CFile@@UAE@XZ ; CFile::~CFile(void)
.text:0040337B mov ecx, [esp+0BCh+var_C]
.text:00403382 xor eax, eax
.text:00403384 mov large fs:0, ecx
.text:0040338B add esp, 0BCh
.text:00403391 retn 4
.text:00403391 compare_regcode_4031E0 endp
.text:00403391
.text:00403391 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00403394 align 10h
哈哈,他的注册码就是客户号(硬盘系列号)XOR 292685575(10进制)
注册机就不要做了,用计算器搞掂!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!