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

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

新160個(gè)CrackMe分析-第4組:31-40(下)

2022-09-23 20:53 作者:rkvir逆向工程學(xué)院  | 我要投稿

作者: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.??????036-Andrnalin.2

算法難度:???

爆破難度:?

信息收集

運(yùn)行情況:


查殼與脫殼:

無殼,VB程序!

? ? ? ?

調(diào)試分析

借助VB Decompiler輔助分析:

這里界面上有兩個(gè)函數(shù),一個(gè)是按鈕,另一個(gè)是輸入Name的時(shí)候的事件:

??????????

首先看Text2_change函數(shù):就是根據(jù)Name有無輸入值來判斷是否啟用按鈕

?????Private Sub Text2_Change() '4024F0
? Dim var_1C As Variant
? loc_0040259D: If (Form1.Text2.Text = global_00401DC4) + 1 Then??? //?如果輸入的內(nèi)容為空
? loc_004025AA:?? Set var_1C = Form1.Command1?????? //?按鈕
? loc_004025B7:?? var_1C.Enabled = False??????????? //?不啟用
? loc_004025BF:?? If var_1C >= 0 Then GoTo loc_004025F7
? loc_004025C1:?? GoTo loc_004025E5
? loc_004025C3: End If
? loc_004025CE: Set var_1C = Form1.Command1
? loc_004025DB: var_1C.Enabled = True?????????????? //?有輸入的內(nèi)容則啟用按鈕
? loc_004025E3: If var_1C >= 0 Then GoTo loc_004025F7
? loc_004025E5: ' Referenced from: 004025C1
? loc_004025F1: var_1C = CheckObj(var_1C, global_00401DC8, 140)
? loc_0040260C: GoTo loc_00402621
? loc_00402620: Exit Sub
? loc_00402621: ' Referenced from: 0040260C
End Sub

接下來看Click函數(shù):

?????Private Sub Command1_Click() '401FF0
? loc_004020CA: var_44 = Form1.Text2.Text?????????????????? // Name編輯框的內(nèi)容
? loc_00402126: For var_24 = 1 To Len(var_44) Step 1??????????????? //?遍歷Name字符串
? loc_00402134:?? If var_108 Then?????????????????????? //
? loc_00402170:???? var_8008 = Asc(CStr(Mid(var_44, CLng(var_24), 1)))????? //?取一個(gè)字節(jié)變成ASCII碼
? loc_00402176:???? var_B4 = var_8008
? loc_004021A0:???? var_34 = var_34 + var_8008????????????????? //?累加到var_34
? loc_004021CB:?? Next var_24
? loc_004021D1:?? GoTo loc_00402132
? loc_004021D6: End If
? loc_00402204: var_34 = var_34 * 1234567890??????????? //?累加結(jié)果乘以1234567890
? loc_00402254: Mid(var_34, 9, 1) = "-"?????????????? //?修改其中一個(gè)值
? loc_004022CB: If (Form1.Text1.Text = var_34) Then???? //?如果輸入的Key == var_34則成功
? loc_004022D1:?? Beep
? loc_00402374:?? var_54 = MsgBox("? RiCHTiG !!!!?? ....? weiter mit dem N?chsten !!!", 48, "RiCHTiG !", 10, 10)
? loc_00402391: Else
? loc_0040240F:?? var_8018 = MsgBox("Leider Falsch!?? Nochmal veruschen ! Wenn Du es nicht schaffen solltest, schreib mir !? Andrenalin@gmx.net", 16, "LEiDER Falsch !? ", 10, 10)
? loc_0040242E:?? var_54 = var_8018
? loc_00402446: End If
? loc_00402459: GoTo loc_0040248F
? loc_0040248E: Exit Sub
? loc_0040248F: ' Referenced from: 00402459
? loc_004024C0: GoTo loc_00esi
End Sub

按照上述代碼的思路去寫注冊(cè)機(jī):

?????#define _CRT_SECURE_NO_WARNINGS
#include

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

??? std::cin >> name;
??? len = strlen(name);
??? for (int i = 0; name[i]; i++)?? check += name[i];
??? check *= 1234567890;

??? sprintf(serial,"%lld",check);
??? serial[8] = '-';
??? std::cout << serial;
}

得出的結(jié)果不對(duì),當(dāng)輸入為selph的時(shí)候,輸出為:66666666-600,動(dòng)態(tài)調(diào)試查看真正是輸出:

到這里生成-的時(shí)候,發(fā)現(xiàn)這里出現(xiàn)了兩次,而反匯編軟件只識(shí)別到了一個(gè),故再加一個(gè)即可

??????????

然后這就是完整的注冊(cè)碼生成了

注冊(cè)機(jī)

注冊(cè)碼生成算法:

?????#define _CRT_SECURE_NO_WARNINGS
#include

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

??? std::cin >> name;
??? len = strlen(name);
??? for (int i = 0; name[i]; i++)
??? {
??????? check += name[i];
??? }
??? check *= 1234567890;

??? sprintf(serial,"%lld",check);
??? serial[3] = '-';
??? serial[8] = '-';
??? std::cout << serial;
}

效果:換個(gè)Name測(cè)試



2.??????037-fireworx2


算法難度:??

爆破難度:?

信息收集

運(yùn)行情況:


??????????

查殼與脫殼:


??

調(diào)試分析

? ? ?是Delphi程序,IDR噠:


硬編碼序列號(hào),這里獲取了Name之后進(jìn)行了push,2次,所以這里拼接了2個(gè)Name

??????????

輸入為selph,則最終的拼接結(jié)果是:selphselph625g72:

??????????

總結(jié)

很基礎(chǔ),考察函數(shù)調(diào)用的傳遞參數(shù)理解

3.??????038-Eternal Bliss.3

算法難度:??

爆破難度:?

信息收集

運(yùn)行情況:

啊這,看來又是VB

??????????

查殼與脫殼:

無殼:

??????????

調(diào)試分析

又是VB,真的太頂了,逆VB好惡心啊

首先VBDecompiler找到這個(gè)注冊(cè)按鈕事件的函數(shù)起始地址,然后x86dbg下斷點(diǎn)開始分析(這個(gè)偽代碼太惡心了,還是看反匯編吧)

??????????

首先輸入1234567進(jìn)行調(diào)試,VB的反匯編很惡心就是,很長一段代碼,只有幾句是跟代碼邏輯相關(guān)的內(nèi)容,大部分都是干擾

剛開始保存了一系列字符到棧里:

? ? ? ? ??


(大部分代碼沒啥用,主要看自動(dòng)注釋的內(nèi)容,還有函數(shù)call,是否是處理我們輸入的內(nèi)容,如果是,大概率就是我們要看的地方,否則先跳過吧)

然后接下來計(jì)算了一下字符串長度,保存了起來,大概率是循環(huán)遍歷字符要用到??

????????

再往下就是循環(huán)了,一個(gè)jmp跳轉(zhuǎn)下去,然后又跳轉(zhuǎn)上來,直接看循環(huán)的關(guān)鍵內(nèi)容吧:

超級(jí)長的循環(huán)代碼,實(shí)際有用的就這幾行,取一個(gè)字節(jié),然后轉(zhuǎn)換成ascii碼的值,然后累加起來,累加值保存在[ebp-40]


接下來跳出循環(huán),然后就用上了函數(shù)開頭保存的一堆字符:

這里就是第一處校驗(yàn)跳轉(zhuǎn)了,這里累加Reverse每個(gè)字符的ascii的值,和輸入的累加值做對(duì)比,如果相同則不跳轉(zhuǎn)

??????????

再往下就是第二次校驗(yàn)對(duì)比了,首先是獲取第2,4,7個(gè)字符

??????????

然后對(duì)這三個(gè)字符進(jìn)行一系列計(jì)算:保存到了[ebp-150]里

??????????

再往下就是對(duì)比了:判斷剛剛計(jì)算的那個(gè)值是否為0,如果為0則表示失敗

??????????

到這里已經(jīng)分析的差不多了:

–?開始遍歷字符累加,確保注冊(cè)碼是Reverse這7個(gè)字母的組合

–?后來取其中第2,4,7個(gè)字符拿來計(jì)算,確保這個(gè)字母組合的這幾個(gè)位置的字母是固定的,這三個(gè)位置都是e

滿足這兩個(gè)條件即為正確的碼,測(cè)試:veResre:

??????????

總結(jié)

逆Vb的時(shí)候不用一條一條看,很簡(jiǎn)單的幾句話,可能會(huì)被VB填充成超級(jí)大一段

4.??????039-eKH1

算法難度:????

爆破難度:?

信息收集

運(yùn)行情況:

? ? ? ? ??


查殼與脫殼:

無殼:

調(diào)試分析

首先看按鈕的邏輯:

首先獲取UserName,進(jìn)行長度驗(yàn)證,然后獲取Serial

接下來將獲取的UserName和Serial作為參數(shù),調(diào)用校驗(yàn)函數(shù)00427A20

如果得到的返回值是0x0BC614E則表示驗(yàn)證成功

??????????

接下來看這個(gè)校驗(yàn)函數(shù):

首先是一些初始化操作,保存了參數(shù)到局部變量里


接下來對(duì)UserName進(jìn)行處理:計(jì)算一個(gè)累加值

計(jì)算方法看注釋,這里簡(jiǎn)述一下:

–?取一個(gè)字符到ebx

–?ebx左移8位

–?ebx進(jìn)行或操作,或一個(gè)數(shù)組中的字符

–?如果ebx小于0了,則乘以-1

–?循環(huán)

??????????

最終將剛剛計(jì)算的值轉(zhuǎn)換成字符串,計(jì)算字符串長度

這里的字符串長度就是接下來循環(huán)的次數(shù),也就是這個(gè)累加值的位數(shù)

接下來的校驗(yàn)流程大概是:

a.?取ebx的最后一位作為索引,從新的數(shù)組中獲取一個(gè)字符

b.?將新得到的字符拼接到正確序列號(hào)的字符串里

c.?然后刪去最后一位,回到步驟1? ? ? ? ??

注冊(cè)機(jī)

注冊(cè)碼生成算法:

?????#define _CRT_SECURE_NO_WARNINGS
#include

const char* arr = "LANNYDIBANDINGINANAKEKHYANGNGENTOT";
const char* arr2 = "LANNY5646521";
int main()
{
??? //char name[100] = { 0 };
??? char name[] = "selph";
??? char serial[100] = { 0 };
??? int len = 0;
??? int ebx = 0;

??? for (int i = 0;name[i]; i++)
??? {
??????? ebx += name[i];
??????? ebx <<= 8;

??????? ebx |= arr[i];
??????? if (ebx < 0) {
??????????? ebx *= -1;
??????? }
??? }
??? ebx ^= 0x12345678;

??? for (int i = 0; ebx; i++)
??? {
??????? serial[i] = arr2[ebx % 10];
??????? ebx /= 10;
??? }

??? std::cout << serial << std::endl;
}

效果:? ? ? ? ??


總結(jié)

比上一節(jié)看VB舒服多了,感覺這一節(jié)的難點(diǎn)在于分析理解這些反匯編是在干嘛的

5.??????040-DaNiEI-RJ1

算法難度:??

爆破難度:?

信息收集

運(yùn)行情況:

怪怪的

? ?


點(diǎn)擊File選項(xiàng)里的按鈕才顯示出來:

? ? ? ? ??

查殼與脫殼:? ? ? ? ?


調(diào)試分析

Delphi程序:

常規(guī)的獲取輸入判斷是否為空:

? ? ? ? ??

然后是常規(guī)的根據(jù)Name計(jì)算校驗(yàn)碼環(huán)節(jié):

算法:遍歷字符串,取每一個(gè)字節(jié),+5

??????????

然后是常規(guī)的比對(duì)環(huán)節(jié)

??????????

?注冊(cè)機(jī)

注冊(cè)碼生成算法:(點(diǎn)快了創(chuàng)建成.NET6的了,干脆就用這個(gè)寫了...)

?????string Name = Console.ReadLine();
string Serial="";
if (Name == null) return;

for (int i = 0; i < Name.Length; i++)
??? Serial += ((char)((int)Name[i] + 5)).ToString();

Console.WriteLine(Serial);

效果:? ? ? ? ??


總結(jié)

普普通通,很基礎(chǔ)


新160個(gè)CrackMe分析-第4組:31-40(下)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
灵璧县| 徐闻县| 梧州市| 甘孜县| 齐河县| 郧西县| 宜州市| 锦屏县| 会同县| 镇平县| 西乡县| 防城港市| 太康县| 昌吉市| 灌云县| 库车县| 桃园县| 贵阳市| 唐河县| 宣威市| 全南县| 黎川县| 赫章县| 福鼎市| 当涂县| 松原市| 甘南县| 西乌珠穆沁旗| 洪泽县| 麟游县| 万载县| 长葛市| 灵璧县| 阳谷县| 佛坪县| 久治县| 天台县| 赤城县| 双牌县| 云霄县| 长阳|