冷雨飄心的第二個crackme的破解方法,大家看看對不對! (5千字)
工具:sice4.05,tc2
環境:win98
物件:冷雨飄心的第二個crackme
下載地址:http://person.longcity.net/home3/feeling/crack/files/crkme2.zip
下斷點getdlgitemtexta:
0167:0040115C PUSH 32
0167:0040115E PUSH 00403026
0167:00401163 PUSH 000003ED
0167:00401168 PUSH DWORD PTR [EBP+08]
0167:0040116B CALL USER32!GetDlgItemTextA
//取得name,放在00403026
0167:00401170 MOV [00403270],EAX
//EAX內是name的字元數
0167:00401175 CMP EAX,00
//看name是否為空
0167:00401178 JZ 00401389
//是就報錯
0167:0040117E LEA ESI,[00403026]
0167:00401184 CALL 004014B0
//對輸入的name加工。加工結果放在004030DB
0167:00401189 MOV EAX,[004030DB]
0167:0040118E MOV EDX,[004030DF]
0167:00401194 PUSH 004031BB
0167:00401199 PUSH 32
0167:0040119B PUSH 0D
0167:0040119D PUSH DWORD PTR [00403494]
0167:004011A3 CALL USER32!SendMessageA
//取得serial,放在004031bb
0167:004011A8 OR EAX,EAX
//看serial是否為空
0167:004011AA JZ 00401389
//是就報錯
0167:004011B0 LEA ESI,[004031BB]
0167:004011B6 MOV DWORD PTR [ESI+EAX],00000000
0167:004011BD PUSH ESI
0167:004011BE POP EDI
0167:004011BF MOV AL,10
0167:004011C1 ADD AL,1D
0167:004011C3 MOV ECX,EAX
0167:004011C5 REPNZ SCASB
//看serial內是否有"-"
0167:004011C7 JNZ 0040129
//沒有就說serial格式不對
0167:004011CD MOV EAX,[ESI]
//取serial前4個位元組
0167:004011CF XOR EAX,4743435F
//看是否為"_CCG"。"_CCG"的ASCII碼為5F434347
0167:004011D4 JNZ 004012A4
//不是就報錯
0167:004011DA LEA ESI,[004031BB]
0167:004011E0 ADD ESI,05
//取serial第5個位元組以後的資料
0167:004011E3 CALL 0040172F
//檢查serial是否符合要求。必須有8個位元組,
//內容只能是0-9和A-F,轉換為16進位制字串。
//比如我輸入的是_CCG-00000001-00000002,
//轉換成0x00000001
0167:004011E8 XOR EAX,-01
//輸入的還不能全為0否則也報錯
0167:004011EB JZ 004012A4
0167:004011F1 XOR EAX,-01
0167:004011F4 MOV [004030E3],EAX
0167:004011F9 LEA ESI,[004031BB]
0167:004011FF ADD ESI,0E
//同上,檢查00000002
0167:00401202 CALL 0040172F
0167:00401207 XOR EAX,-01
0167:0040120A JZ 004012A4
0167:00401210 XOR EAX,-01
0167:00401213 MOV [004030E7],EAX
0167:00401218 MOV EAX,[004030E3]
0167:0040121D MOV EDX,[004030E7]
0167:00401223 CALL 00401636
//關鍵部分:透過00000001和00000002混合運算得到兩16進位制數
//為中間結果
0167:00401228 MOV EAX,[004030EB]
//00000001的放在EAX裡
0167:0040122D MOV EDX,[004030EF]
//00000002的放在EDX裡
0167:00401233 XOR EAX,[004030DB]
//檢查0000001的中間結果是否為[004030DB],即name加工的結果
0167:00401239 JNZ 004012A4
//不是就報錯
0167:0040123B XOR EDX,[004030DF]
//檢查0000002的中間結果是否為0x656d7568
0167:00401241 JNZ 004012A4
//不是就報錯
0167:00401243 JMP 004012BD
//註冊成功畫面
下面是序列號生成程式,在TC2下除錯透過。
#include <stdio.h>
#include <dos.h>
unsigned long ESI[] = {
0x6d797468,
0x6d797468,
0x6d797468,
0x6c6f7665,
0x6c6f7665,
0x6c6f7665,
0x6c6f7665,
0x43525950,
0x43525950,
0x43525950,
0x43525950,
0x68656865,
0x68656865,
0x68656865,
0x68656865,
0x476f6f64};
unsigned long ror(unsigned long a, unsigned long b)
{
for(; b > 0; b --)
{
if((a & 0x00000001) == 0x00000001)
{
a = a >> 1;
a = a + 0x80000000;
}
else
a = a >> 1;
}
return a;
}
unsigned long rol(unsigned long a, unsigned long b)
{
for(; b > 0; b --)
{
if((a & 0x80000000) == 0x80000000)
{
a = a << 1;
a = a + 0x00000001;
}
else
a = a << 1;
}
return a;
}
void main()
{
unsigned char name[32], name_length;
unsigned long t = 0, ans = 0;
unsigned char a, b, l;
unsigned long ecx = 0, edi = 0;
int i;
unsigned long eax =
0x00000000;
unsigned long edx =
0x656d7568;
for(i = 0; i < 32; i ++) name[i] = 0;
printf("\nPlease input your name:");
gets(name);
name_length = strlen(name);
if(name_length >= 20)
{
ans = name_length;
ans = ans << 16;
t = 0;
for(i = 1; i < 32; i ++)
t = t + name[i] * i;
t = t ^ 0xffffffff;
t = t & 0x0000ffff;
ans = ans + t;
}
else
{
l = name_length;
for(i = strlen(name) - 1; i < 32; i
++)
{
a = name[i];
b = a;
a = a / l;
b = b * l;
a = a + b;
name[l]= (char)a;
l ++;
}
a = 0;
for(i = 0; i < name_length; i ++)
a = a + name[i];
ans = ans + a;
ans = ror(ans, 8);
ans = ans + 0x200000;
t = 0;
for(i = 1; i < 32; i ++) t
= t + name[i] * i;
t = t ^ 0xffffffff;
t = t & 0x0000ffff;
ans = ans + t;
}
eax = ans + 0x20434347;
edx = edx + 0x26424347;
i = 15;
for(edi = 1; edi <= 8; edi ++)
{
ecx = edx;
eax = eax ^ edx;
ecx = ecx & 0x0000001f;
eax = rol(eax, ecx);
eax = eax + ESI[i];
i --;
ecx = eax;
edx = edx ^ eax;
ecx = ecx & 0x0000001f;
edx = rol(edx, ecx);
edx = edx + ESI[i];
i --;
}
printf("\n下面是您的序列號:");
printf("\n_CCG-%08lx-%08lx\n", eax, edx);
printf("裡面的字母應該為大寫,請自己修正。");
}
請大家指正,謝謝!
shengzan@263.net
相關文章
- 請各位大佬幫忙看看我的 Page Object 模式用的對不對2020-11-27Object模式
- 破解練習-CRACKME0012023-02-11
- 風雨飄搖中的高鑫零售2021-08-24
- 我決不黑微軟。。也不知你說的對不對?大家來點有思想高度的分析2018-07-28微軟
- MyEclipse5 5的破解方法2018-11-12Eclipse
- 對CSS變數不熟悉,這5個事例可看看!2021-10-02CSS變數
- 整理分享5款可能對大家有幫助的軟體2023-12-01
- word中怎麼解決英文對不齊 word英文對不齊的方法2022-05-15
- 大家對PHP的誤解有哪些 ??2021-11-25PHP
- 糾正大家對 in 用法的誤解2022-11-04
- 對於 AIGC 類產品的測試,大家都有什麼方法2024-04-07AIGC
- 如何對比多個庫,看看那個最靠譜2019-02-16
- 160個crackme(6)2018-12-02
- 160個CrackMe(4)2018-12-02
- 2020 年對 Kubernetes 的 5 個預測2020-01-07
- 戒賭心德個人對彩票的理解-回血上岸取決於自己的心態2019-05-15
- 找對的方向,用對的方法,做好的方案2018-05-20
- 從大家對Cocos的抱怨中我看到的商機2020-10-11
- NEJM:全球首個咖啡對心臟急性影響的隨機對照試驗出爐!2023-04-11隨機
- 關於Java集合框架,這篇講的還算不錯了,建議大家看看!2020-11-24Java框架
- 不知道大家對《測試框架》這個詞是怎麼理解的呢2020-04-27框架
- 大家對vgo怎麼看呢?2018-04-05Go
- 應對百度細雨演算法的有效方法,關鍵詞排名已經恢復2018-08-05演算法
- 手機QQ坦白說破解方法介紹 qq坦白說怎麼破解對方身份?2018-04-02
- CoDeSys3.5軟模擬結果不對的解決方法2024-09-05S3
- Python的高階特徵你知多少?來對比看看2019-04-22Python特徵
- 擼一個 webpack 外掛,希望對大家有所幫助2021-12-16Web
- 對類物件的方法操作2020-10-31物件
- 個人平時對 JS 資料結構一些常用的處理方法總結,歡迎大家給出更好的思路2019-07-23JS資料結構
- Node.js流,這樣的開啟方式對不對!2018-08-20Node.js
- 冷靜面對“元宇宙”熱潮QCQ2022-03-19元宇宙
- 阿里雲冷門 API/SDK 對接心得2021-04-22阿里API
- 個人對於JavaScript中Number.toFixed()方法的理解2018-10-26JavaScript
- UIView中與AutoLayout相關的幾個方法對比2018-04-24UIView
- 5種常見Bean對映工具的效能比對2019-11-14Bean
- 大家對 Laravel 的原始碼和架構感興趣麼?2019-11-15Laravel原始碼架構
- 如何針對性破解自動化運維落地的18個關鍵問題?2018-10-31運維
- 等冪和最少項陣列的對稱與不對稱2022-01-06陣列
- 對 Steam 的同理心:使用者的購物行為2020-05-13