最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

新160個CrackMe分析-第4組:31-40(上)

2022-09-22 10:33 作者:rkvir逆向工程學院  | 我要投稿

?作者:selph

目錄:

??031-Cruehead.11

??032-Bengaly-Crackme22

??033-dccrackme13

??034-fireworx54

??035-Dope211225

??036-Andrnalin.26

??037-fireworx27

??038-Eternal Bliss.38

??039-eKH19

??040-DaNiEI-RJ110

1.??????031-Cruehead.1

算法難度:???

爆破難度:?

?信息收集

?運行情況:

??????????

查殼與脫殼:

?無殼:

? ? ? ??? ? ? ? ??

調試分析

字符串提示信息:

??????????

直接從字符串提示信息找到驗證點

這是一個自寫的彈窗函數(shù)還....,繼續(xù)向上交叉引用

??????????

到了上一層:看到的是個窗口過程函數(shù),這里在比對消息碼,這里彈窗往上有個DialogBoxParamA的調用,應該就是創(chuàng)建Register對話框的函數(shù),所以跟進這里的窗口過程

? ? ?


跟進之后,可以看到這有兩個明顯的函數(shù)調用獲取用戶輸入,分別保存在了兩個全局變量里,然后就關閉窗口了,接下來還得從剛剛創(chuàng)建窗口的地方往下看

??????????

往下看就是使用獲取的Name和Serial進行一個函數(shù)調用,然后用調用結果比對,選擇是否彈窗成功

??????????

接下來看Name的校驗計算:

首先是判斷字符的合法性,必須是字母,如果是小寫字母則轉變成大寫字母

然后累加每個字母的值,和5678h進行異或,得到用戶名的校驗值

??????????

接下來是序列號的校驗:

循環(huán)遍歷每一個字符,序列號如果說是純數(shù)字,那么減去0x30就相當于是把字符數(shù)字變成整數(shù)類型的數(shù)字,然后每次操作一個數(shù)字累加到edi之前就先乘以一次10,那么這個邏輯就相當于是字符串轉整型的操作

然后進行一個異或1234h,返回校驗值

??????????

最后比較這兩個校驗值,相同則彈窗成功:

??????????

注冊機

注冊碼生成算法:

?????#define _CRT_SECURE_NO_WARNINGS
#include

int main()
{
??? char name[100] = { 0 };
??? char serial[100] = { 0 };
??? int name_check = 0;

??? std::cin >> name;

??? for (int i = 0; name[i]; i++) {
??????? if (name[i] > 'Z')name[i] -= 0x20;
??????? name_check += name[i];
??? }
??? name_check ^= 0x5678;
??? name_check ^= 0x1234;

??? sprintf(serial, "%d", name_check);
??? std::cout << serial << std::endl;
}

結果:

??????????

2.??????032-Bengaly-Crackme2

算法難度:??

爆破難度:?

信息收集

運行情況:

沒有任何label,就2個框框輸入和check

??????????

查殼與脫殼:

UPX殼,ESP定律即可

??????????

調試分析

是個手寫窗口過程的程序,從頭到尾跟進,這里就是調用自寫函數(shù)

??????????

跟進以后,很明顯的看到了窗口過程函數(shù):

??????????

直接跟進到窗口過程里:發(fā)現(xiàn),驗證彈窗的過程正好就寫在這里:

剛開始是先獲取用戶輸入:

??????????

獲取完成輸入之后,對用戶名進行一個處理,然后對序列號進行一個處理,就進行對比,如果相同,則跳轉

用戶名處理過程:

a.?取一個字節(jié)

b.?求平方,結果加到esi

c.?右移這個字節(jié)1位,結果加到esi

d.?esi減去這個字節(jié)

e.?然后循環(huán)處理每一個字節(jié),最終結果在esi

?????????

對于序列號的處理,這個call實際上就是_atoi函數(shù)(已經不止一次逆這個函數(shù)了......)

??????????

直接就是反著操作一波,就可以還原序列號了

?注冊機

注冊碼生成算法:

?????#define _CRT_SECURE_NO_WARNINGS
#include

int main()
{
??? char name[100] = { 0 };
??? char serial[100] = { 0 };
??? int len = 0;
??? int check = 0;

??? std::cin >> name;
??? len = strlen(name);

??? for (int i = 0; name[i]; i++)
??? {
??????? char tmp = name[i];
??????? check += tmp * tmp;
??????? check += tmp >> 1;
??????? check -= tmp;
??? }

??? _itoa(check, serial, 10);
??? std::cout << serial << std::endl;

??? return 0;
}

結果:


3.??????033-dccrackme1

算法難度:??

爆破難度:?

信息收集

運行情況:

打開是一個彈窗:

??????????

然后才顯示窗口?

?????????

查殼與脫殼:

?無殼:

??????????

調試分析

Delphi程序,Check按鈕邏輯:

獲取Name,計算一個值,轉字符串,和Serial比對

??????????

注冊機

注冊碼生成算法:

?????#define _CRT_SECURE_NO_WARNINGS
#include

int main()
{
??? char name[100] = { 0 };
??? char serial[100] = { 0 };
??? int len = 0;
??? int check = 0;

??? std::cin >> name;
??? len = strlen(name);
??? for (int i = 0; name[i]; i++)
??? {
??????? char tmp = name[i];
??????? check += (tmp - 0x17) * (tmp - 0x11);
??? }

??? _itoa(check,serial,10);
??? std::cout << serial;
}

效果:

??????????

4.??????034-fireworx5

算法難度:?

爆破難度:?

信息收集

運行情況:

只有一個輸入框,沒有check按鈕

??????????

查殼與脫殼:

無殼,那個年代Borland Delphi程序很主流啊

??????????

調試分析

硬編碼比對驗證,硬編碼的值是Label的值

??????????

效果:

??????????

5.??????035-Dope21122

算法難度:??

爆破難度:????(入口點難找)

信息收集

運行情況:


??????????

查殼與脫殼:

無殼

??????????

調試分析

這是個delphi程序,但是用DD和IDR都不能分析出來內容,然后看視頻得知使用PE.Explorer程序可以輔助分析,吾愛愛盤可以下載到

首先查看RC資源:發(fā)現(xiàn)這個按鈕標題和事件

??????????

接下來點擊反匯編查看VCL方法,找到這個事件:

??????????

分析這個地址:0x421DC8,由于這是個Delphi程序,里面會存在各種亂七八糟的函數(shù)調用,固本次分析采用動態(tài)靜態(tài)結合的方式進行,這里關于出現(xiàn)的call的功能是通過x86dbg運行得知的,為了方便展示,這里依然是使用IDA的截圖:

剛開始是獲取輸入的Name和Serial,Name長度需要大于等于4?

?????????

接下來是對Name的處理:

遍歷字符串每次取一個字節(jié),左移9位,然后累加到ebx里??

????????

驗證環(huán)節(jié)依然是對比:

將剛剛計算的累加值變成字符串,然后對比輸入的序列號,對比不相同則彈窗失敗

? ? ? ? ??


注冊機

注冊碼生成算法:

?????#define _CRT_SECURE_NO_WARNINGS
#include

int main()
{
??? char name[100] = { 0 };
??? char serial[100] = { 0 };
??? int len = 0;
??? int check = 0x37;

??? std::cin >> name;
??? len = strlen(name);
??? for (int i = 0; name[i]; i++)
??????? check += (name[i] << 9);
??? _itoa(check, serial, 10);
??? std::cout << serial << std::endl;
}

效果:

??????????

參考資料

–?[1]?新160個CrackMe算法分析-035-Dope2112.2_嗶哩嗶哩_bilibili


新160個CrackMe分析-第4組:31-40(上)的評論 (共 條)

分享到微博請遵守國家法律
宝坻区| 利辛县| 大埔县| 延川县| 湘阴县| 社旗县| 乌兰察布市| 兴城市| 那坡县| 乐平市| 汾西县| 碌曲县| 张家口市| 岚皋县| 温宿县| 于田县| 龙川县| 新疆| 东莞市| 泰兴市| 嘉峪关市| 平潭县| 延寿县| 通河县| 闽侯县| 莲花县| 依安县| 衡山县| 丽江市| 永寿县| 兴义市| 蒲城县| 银川市| 赞皇县| 资源县| 盐池县| 兴文县| 宜宾市| 射阳县| 米林县| 辉县市|