Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Hacks & Crackmes Tests, Fragen oder Hilfestellungen. Crackmes und Hackits werden hier diskutiert.

Problem mit der Umwandlung von Assembly zu C++

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 ...

Antwort
Alt 11.11.07, 12:10   #1 (permalink)
 
Registriert seit: 26.02.06
plooy Leistung: Facit NTK
Likes: 0
Standard Problem mit der Umwandlung von Assembly zu C++

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
Vielen Dank

PS: Hat jemand genau für dieses Problem einen Link zu einem Tutorial?
plooy ist offline   Mit Zitat antworten
Alt 11.11.07, 16:01   #2 (permalink)
Senior Member
 
Registriert seit: 03.09.05
Lesco Leistung: Facit NTK
Likes: 0
Standard

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++) {
..
}
So muss dann auch für den weiteren Code vorgehen, wobei es manchmal einfacher ist, den Assembly-Code aus dem Ziel zu kopieren und inline zu verwenden, anstatt ihn in die verwendete Sprache umzuschreiben, wenn man es sich um etwas handelt, was man nur kopieren und nicht umkehren o.ä. muss.
Lesco ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 11.11.07, 16:09   #3 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

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
in etwa:
Code:
i=0;
while (i<lenght(InputUserCompanyName)) do...
...
i=i+1;
od
oder auch gleich:
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.
CDW ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Hacks & Crackmes » Problem mit der Umwandlung von Assembly zu C++
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ä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


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61