適合新手的160個creakme(二)

先跑一下,然後找出關鍵字符串

關鍵字符串是You Get Wrong和Try Again,不過IDA好像識別不出來這個字符串,在Ollydbg中右鍵Search For,尋找所有字符串,可以找到這些字符串,好像是unicode碼,可能IDA沒有辦法識別

然後定位到代碼

.text:004025E5                 push    offset aYouGetWrong ; "You Get Wrong"

然後定位到調用代碼,這裏的跳轉如果被忽略那麼就可以直接跳轉到正確結果

.text:0040258B                 jz      short loc_4025E5

直接在Ollydbg中改寫這個地方的指令,右鍵binary->edit,將這兩個指令改成nop

然後就ok了

上面的修改說明了關鍵判斷確實是在這裏

 看看這部分的代碼

.text:00402510 loc_402510:                             ; CODE XREF: .text:004024FC↑j
.text:00402510                 mov     eax, [ebp-18h]    ;指向UNICODE "Type In Your Serial"
.text:00402513                 mov     ecx, [ebp-1Ch]    ;指向UNICODE "1658111"
.text:00402516                 mov     edi, ds:__vbaStrCat
.text:0040251C                 push    eax
.text:0040251D                 push    offset aAka     ; "AKA-" 
.text:00402522                 push    ecx
.text:00402523                 call    edi ; __vbaStrCat  ;應該是VBA裏面的字符串拼接函數,參數都是通過棧來傳遞的,返回值爲AKA-1658111
.text:00402525                 mov     ebx, ds:__vbaStrMove
.text:0040252B                 mov     edx, eax  
.text:0040252D                 lea     ecx, [ebp-20h]
.text:00402530                 call    ebx ; __vbaStrMove
.text:00402532                 push    eax
.text:00402533                 call    ds:__vbaStrCmp  ;比較函數,比較的是"AKA-1658111"和序列號字符串
.text:00402539                 mov     esi, eax      ;返回值爲1,賦值給esi
.text:0040253B                 lea     edx, [ebp-20h]
.text:0040253E                 neg     esi          ;求補運算,這裏esi等於全f
.text:00402540                 lea     eax, [ebp-18h]
.text:00402543                 push    edx
.text:00402544                 sbb     esi, esi
.text:00402546                 lea     ecx, [ebp-1Ch]
.text:00402549                 push    eax
.text:0040254A                 inc     esi          ;加1變爲0
.text:0040254B                 push    ecx
.text:0040254C                 push    3
.text:0040254E                 neg     esi          ;求補還是0
.text:00402550                 call    ds:__vbaFreeStrList
.text:00402556                 add     esp, 10h
.text:00402559                 lea     edx, [ebp-28h]
.text:0040255C                 lea     eax, [ebp-24h]
.text:0040255F                 push    edx
.text:00402560                 push    eax
.text:00402561                 push    2
.text:00402563                 call    ds:__vbaFreeObjList
.text:00402569                 add     esp, 0Ch
.text:0040256C                 mov     ecx, 80020004h
.text:00402571                 mov     eax, 0Ah
.text:00402576                 mov     [ebp-64h], ecx
.text:00402579                 test    si, si        ;esi爲0,test設置了zf標誌位
.text:0040257C                 mov     [ebp-6Ch], eax
.text:0040257F                 mov     [ebp-54h], ecx
.text:00402582                 mov     [ebp-5Ch], eax
.text:00402585                 mov     [ebp-44h], ecx
.text:00402588                 mov     [ebp-4Ch], eax
.text:0040258B                 jz      short loc_4025E5  ;所以這裏ZF標誌位是1,要進行跳轉
.text:0040258D                 push    offset aYouGetIt ; "You Get It"
.text:00402592                 push    offset asc_401B9C ; "\r\n"
.text:00402597                 call    edi ; __vbaStrCat
.text:00402599                 mov     edx, eax
.text:0040259B                 lea     ecx, [ebp-18h]
.text:0040259E                 call    ebx ; __vbaStrMove
.text:004025A0                 push    eax
.text:004025A1                 push    offset aKeygenItNow ; "KeyGen It Now"

大致過一遍上面的代碼,可以知道只需要序列號等於AKA-1658111就可以讓比較函數返回0,然後通過後面的檢測,由於AKA是固定字符串,剩下的就是看1658111這個串是怎麼來的。

然後再往前找ebp-1ch在哪裏被引用了

004023F3這個位置,ebp-1ch被修改爲了用戶名字符串,接着402415處又將該字符串作爲參數調用長度,返回0x11,長度值。00402420處將長度值乘以17CFB,0040242D調用了rtcAnsiValueBstr函數,參數爲用戶名,返回第一個字符,該函數執行之後,eax值爲0x54,T的ascll碼,然後加上前面長度值乘以17CFB的結果,位0x194cff,0040243F將這個值作爲參數調用了__vbaStrI4函數,這個函數返回之後,eax指向字符串“1658111”,這個字符串就來了,所以這應該是數字轉字符串的函數。

所以最後的算法應該是用戶名的長度乘以17CFB加上用戶名的第一個字符,結果轉成10進制,再轉成字符串,加上前綴"AKA-"。

最後,可以改最後一個條件的判斷碼,來實現跳轉轉移,JE改成JNE,74改75

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章