| Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert. |
Diskussion: Problem mit der Umwandlung von Assembly zu C++ im Forum Hacks & Crackmes, in der Kategorie Software Home; Anzeige Guten Tag, Ich habe mich mit Starzboys Keygenme #2 beschäftigt und bin auf ein Problem gestoßen, denn ich will ...
![]() |
| | #1 (permalink) |
| Registriert seit: 26.02.06 ![]() Likes: 0 | Anzeige Guten Tag, Ich habe mich mit Starzboys Keygenme #2 beschäftigt und bin auf ein Problem gestoßen, denn ich will folgenden Assembly-Code in C++ schreiben, da ich allerdings nie zuvor so etwas gemacht habe (ich habe schon Keygens aus dem Keygenme estellt, aber nicht in C++), habe ich keinen Anhaltspunkt, wo ich anfangen soll. Könnt ihr mir sagen wie ihr dabei vorgeht? Die Ide ist Dev-C++, wenn das jemanden nützt. Der Code ist aus IDA, ich habe schon einen Teil der Variablen benennen können. Code: .text:0040155F mov [ebp+i], 0 .text:00401569 .text:00401569 LoopTop1: ; CODE XREF: _main+286j .text:00401569 lea eax, [ebp+InputUserCompanyName] ; Load Effective Address .text:0040156F mov [esp+158h+sonst], eax .text:00401572 call strlen ; Call Procedure .text:00401577 cmp eax, [ebp+i] ; Compare Two Operands .text:0040157D jbe AfterLoop1 ; Jump if Below or Equal (CF=1 | ZF=1) .text:00401583 lea eax, [ebp+unbekannt1] ; Load Effective Address .text:00401586 add eax, [ebp+i] ; Add .text:0040158C sub eax, 256 ; Integer Subtraction .text:00401591 movsx eax, byte ptr [eax] ; Move with Sign-Extend .text:00401594 mov [ebp+sum1], eax .text:0040159A lea eax, [ebp+sum1] ; Load Effective Address .text:004015A0 add dword ptr [eax], 1456982h ; Add .text:004015A6 lea eax, [ebp+sum1] ; Load Effective Address .text:004015AC add dword ptr [eax], 5893632h ; Add .text:004015B2 mov eax, [ebp+sum1] .text:004015B8 add eax, [ebp+sum1] ; Add .text:004015BE add eax, 9061 ; Add .text:004015C3 mov [ebp+sum1], eax .text:004015C9 mov ecx, [ebp+calculatedPwd] .text:004015CF mov eax, ecx .text:004015D1 mov edx, eax .text:004015D3 shl edx, 6 ; Shift Logical Left .text:004015D6 sub edx, ecx ; Integer Subtraction .text:004015D8 mov eax, [ebp+sum1] .text:004015DE add eax, eax ; Add .text:004015E0 lea eax, [edx+eax] ; Load Effective Address .text:004015E3 mov [ebp+calculatedPwd], eax .text:004015E9 mov eax, [ebp+calculatedPwd] .text:004015EF add eax, eax ; Add .text:004015F1 add eax, [ebp+unbekannt2] ; Add .text:004015F7 mov [ebp+calculatedPwd], eax .text:004015FD mov eax, [ebp+calculatedPwd] .text:00401603 add eax, eax ; Add .text:00401605 add eax, 4 ; Add .text:00401608 mov [ebp+calculatedPwd], eax .text:0040160E lea eax, [ebp+i] ; Load Effective Address .text:00401614 inc dword ptr [eax] ; Increment by 1 .text:00401616 jmp LoopTop1 ; Jump .text:0040161B ; --------------------------------------------------------------------------- .text:0040161B .text:0040161B AfterLoop1: ; CODE XREF: _main+1EDj .text:0040161B call rand ; Call Procedure .text:00401620 mov edx, eax .text:00401622 lea ecx, [ebp+var_12C] ; Load Effective Address .text:00401628 mov [ebp+var_13C], ecx .text:0040162E mov eax, edx .text:00401630 mov ecx, [ebp+var_13C] .text:00401636 cdq ; EAX -> EDX:EAX (with sign) .text:00401637 idiv dword ptr [ecx] ; Signed Divide .text:00401639 mov eax, edx .text:0040163B add eax, [ebp+calculatedPwd] ; Add .text:00401641 mov [ebp+CalculatedIdentityCode], eax PS: Hat jemand genau für dieses Problem einen Link zu einem Tutorial? |
| | |
| | #2 (permalink) |
| Senior Member Registriert seit: 03.09.05 ![]() Likes: 0 | Am besten solltest du dich damit befassen, wie bestimmte C++-Anweisungen von den gängigen Compilern in Assembly aussehen und wie die ganzen Dinge wie lokale Variablen/Funktionsaufrufe in Assembly aussehen. Dann musst du eben Stück für Stück übersetzen. Der Original-Code beginnt wahrscheinlich mit einer Art for-Schleife(initialisieren von i, überprüfen der Bedingung, etc.): Eine C++-Entsprechung wäre dann etwa: Code: for(int i=0;i<strlen(InputUserCompanyName);i++) {
..
} |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Hm. Eigentlich sollte man sich nicht zu sehr an C++ aufhängen. Du solltest stattdessen erstmal versuchen, den Algorithmus sprachunabhängig aufzuschreiben (Pseudocode) z.B: Code: ; CODE XREF: _main+286j .text:00401569 lea eax, [ebp+InputUserCompanyName] ; Load Effective Address .text:0040156F mov [esp+158h+sonst], eax .text:00401572 call strlen ; Call Procedure .text:00401577 cmp eax, [ebp+i] ; Compare Two Operands .text:0040157D jbe AfterLoop1 ; Jump if Below or Equal (CF=1 | ZF=1) .text:00401583 lea eax, [ebp+unbekannt1] ; Load Effective Address Code: i=0; while (i<lenght(InputUserCompanyName)) do... ... i=i+1; od Code: for i=0 to InputUserCompanyName-1 do Oft ist es auch sehr hilfreich, das ganze im Debugger schritt für Schritt durchzugehen und sich Notizen zu machen (z.B bei OllyDbg kann man eigene Kommentare in der rechten Spalte eintragen). Dann kann man den Pseudocode wieder in einer bestimmten Sprache umsetzen. Spezielle Tutorials bezüglich "Asm->C++ Keygen" kenne ich nicht, aber Du könntest z.B auf cip.6x.to unter Keygen Tutorials schauen. Edit: da habe ich wohl zu lange getipptr
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Umwandlung Gross/Kleinschreibung | SY|ruS | Code Kitchen | 8 | 23.07.07 18:19 |
| Umwandlung - Dezimalzahlen in Hexadezimalzahlen | GuteFrage | Code Kitchen | 7 | 13.02.07 20:27 |
| Programm zur Umwandlung von Mpeg zu GIF-Dateien | Mocurion | Applikationen | 3 | 15.01.07 21:44 |
| win32 assembly components | v01d | Code Kitchen | 3 | 28.07.06 13:46 |
| Assembly folder wofür ist der gut? -gelöst | steven85 | Windows | 0 | 06.06.06 22:07 |