Deoarece această provocare nu are nicio protecție, o putem rezolva cu ușurință căutând șirul de caractere în fereastra Strings din IDA.
Selectează din meniu: View -> Open Subviews -> Strings, apoi fă dublu clic pe:
.rdata:00404053 0000000D C Gratz man 🙂
Acum ar trebui să fii în secțiunea .rdata a fișierului binar. Cu șirul încă selectat, fă clic dreapta pe el și apasă pe: Xrefs graph to…. Aceasta îți va oferi un grafic util pe care îl poți analiza.
Ar trebui să existe 3 funcții: Main -> SUB0 -> SUB1. Găsește funcția SUB1 în fereastra Functions și fă dublu clic pe ea.
Aici poți vedea următoarele date:
[code].text:00401726 interrestingFunction2 proc near ; CODE XREF: interrestingFunction1+35↓p.text:00401726.text:00401726 Format = dword ptr -28h.text:00401726 var_C = dword ptr -0Ch.text:00401726 arg_0 = dword ptr 8.text:00401726 arg_4 = dword ptr 0Ch.text:00401726.text:00401726 push ebp.text:00401727 mov ebp, esp.text:00401729 sub esp, 28h.text:0040172C mov [ebp+var_C], 0.text:00401733 cmp [ebp+arg_4], 7 ; Parola are 7 caractere..text:00401737 jnz short loc_4017AA ; locația parolei greșite.text:00401739 mov eax, [ebp+arg_0].text:0040173C movzx eax, byte ptr [eax].text:0040173F cmp al, 'S' ; Aici începe parola..text:00401741 jnz short loc_4017AA.text:00401743 mov eax, [ebp+arg_0].text:00401746 add eax, 1.text:00401749 movzx eax, byte ptr [eax].text:0040174C cmp al, 'P'.text:0040174E jnz short loc_4017AA.text:00401750 mov eax, [ebp+arg_0].text:00401753 add eax, 2.text:00401756 movzx eax, byte ptr [eax].text:00401759 cmp al, 'a'.text:0040175B jnz short loc_4017AA.text:0040175D mov eax, [ebp+arg_0].text:00401760 add eax, 3.text:00401763 movzx eax, byte ptr [eax].text:00401766 cmp al, 'C'.text:00401768 jnz short loc_4017AA.text:0040176A mov eax, [ebp+arg_0].text:0040176D add eax, 4.text:00401770 movzx eax, byte ptr [eax].text:00401773 cmp al, 'I'.text:00401775 jnz short loc_4017AA.text:00401777 mov eax, [ebp+arg_0].text:0040177A add eax, 5.text:0040177D movzx eax, byte ptr [eax].text:00401780 cmp al, 'o'.text:00401782 jnz short loc_4017AA.text:00401784 mov eax, [ebp+arg_0].text:00401787 add eax, 6.text:0040178A movzx eax, byte ptr [eax].text:0040178D cmp al, 'S'.text:0040178F jnz short loc_4017AA.text:00401791 mov eax, offset aGratzMan ; "Gratz man :)" ; mesajul de confirmare a parolei.text:00401796 mov [esp+28h+Format], eax ; Format.text:00401799 call printf.text:0040179E mov [esp+28h+Format], 0.text:004017A5 call exitPutem observa că arg_0 este un pointer către un vector de octeți, iar putem presupune că arg_4 este lungimea vectorului. Mai jos se poate vedea că arg_0 este comparat cu parola octet cu octet. Pentru a converti caractere din hexazecimal și invers, selectează linia și apasă tasta R.
Mulțumesc pentru lectură, spor la hacking!