Help - Search - Members - Calendar
Full Version: XOR kryptering / Manuel paketering guider?
SweRAT > Datasäkerhet > Nybörjarhörnan
Yabb
I syftet att få servern UD försöker jag lära mig hur jag ska kunna slänga in ett par rader kod i OllyDBG för att få filen att kryptera och avkryptera sig själv.

Jag har googlat flertalet timmar och dels blivit mycket klokare, men dessvärre får jag inte ihop en fungernade lösning där filen förblir exekverbar.

Har kikat i denna: http://students.sabanciuniv.edu/~canyildizli/UD_methods2.pdf och även denna, http://davidiorg.blogspot.com/2008/06/exe-...g-hard-way.html men får som sagt ingen av dessa metoder att fungera. Så jag är extremt tacksam om någon kan visa mig till en bättre guide eller ge några tips smile.gif

I den andra guiden krypterar han allt i ".data"-segmentet. Har lite svårigheter att hitta var just den börjar och slutar, så jag höftade lite offsets där krypteringen får börja och sluta. Kan detta ha påverkat? Filen verkar i det fallet vara exekverbar, dvs. inget error visas, men servern installeras inte heller på datorn.
shapeless
Nu ska jag försöka mig på en guide smile.gif
Jag valde en PI server för att det ska gå så snabbt som möjligt (vet sen tidigare hur den ser ut och fungerar).

Program som kan tänkas vara användbara är:
* PEiD
* LordPE
* OllyDbg
* någon sorts av hexeditor


Först och främst letade jag upp en codecave med PEiD och hittade en på offset 0x26E. Detta ska bli den nya entrypointen där XOR-rutinen ska ligga.

Öppna upp filen i OllyDbg och gå till den nya entrypointen (notera att imagebasen måste adderas på offsetet, så det blir 0x40026E i mitt exempel). Så; ctrl+g: 40026E.
Här ska xor-rutinen skrivas in, pseudokod:
CODE
mov eax,%STARTADDR%
Loop:
xor byte ptr [eax],0A
inc eax
cmp eax,%ENDADDR%
jnz Loop
jmp %OEP%


Men innan vi skriver in koden måste vi veta %startaddr%, %endaddr% och %OEP% (original entry point).
Var koden börjar ser man ganska lätt i OllyDbg om man tittar vid OEP:
CODE
00400208 >/$ B8 00044000    MOV EAX,original.00400400
0040020D  |. FFD0           CALL EAX
0040020F  |. 6A 00          PUSH 0                                  ; /ExitCode = 0
00400211  \. E8 00000000    CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess

Alltså 0x00400400! Tittar man i LordPE så ser man att det är just där .data-sektionen börjar (LordPE -> PE-editor -> Sections).

Slutadressen är alltså startadressen + längden av .data (fuskar lite då jag vet det sen innan, men egentligen spelar det ingen roll om man inkluderar hela sektionen eller inte. Bara man inte överskrider andra sektioner utan att veta vad de gör.) Längden av .data ser man också i sektionsvyn i LordPE, under kolumnen "VSize" (virtualsize).
OEP ser man också i LordPE.

OBS: Längden av .data varierar beroende på de inställningar man valde när man byggde pi-servern!

Så koden vi ska skriva in på offset 0x40026E är:
CODE
mov eax,400400
xor byte ptr [eax],0A
inc eax
cmp eax,4016D2
jnz 400273
jmp 400208


Så öppna upp OllyDbg igen och hoppa till (ctrl+g) 0x40026E och välj Assemble (eller mellanslag) och börja knappa in koden (den är såklart annorlunda för er som har använt andra inställningar än jag när ni byggde pi-servern.)
Efter detta måste ni markera det ändrade området och välja Copy to executable -> Selection. Sedan i det nya fönstret välj Backup -> Save data to file.

Nu måste man ändra Entrypointen på den nyskapade filen genom LordPE -> PE editor -> Entrypoint: 0000026E -> Save.
Till sist ska bara .datasektionen XOR:as med 0x0A vilket jag gjorde med Hex Workshop. Markera från offset 400 (där .data börjar) ner till offset 16D2 där .data slutar (VSize) och välj Tools -> Operation -> XOR... -> 8Bit unsigned byte, Hex: 0A, Selection -> OK.


Nu borde det fungera om ni gjort rätt ("rätt" betyder inte copypaste, ni måste räkna ut era egna adresser och längder!).

Originalfilen: http://www.virustotal.com/sv/analisis/e023...bceec932a56c511
Den ändrade filen: http://www.virustotal.com/sv/analisis/f37e...b88f481cdc0d274
Yabb
Tack så mycket för guiden Shapeless, det var alldeles lagom detaljerat och bra. En sak är dock lite oklar för mig: Hur använder du PEiD för att hitta en codecave? Jag gissar att du expanderar "First Bytes" kolumnen och tittar efter något specifikt. Men vad? smile.gif Dessutom, måste codecaven vara i slutet av filen eller är det möjligt att hitta ett område i mitten av filen?

Edit: Upptäckte just "Cave finder" funktionen i PEiD, så nu klarnade det smile.gif

Datasektionens början är alltså det som anges som ROffset i LordPE? Eller är det VOffset jag ska kika på?
afx
Snygg guide shapeless. Tack. Fan vad tråkigt att du ska lägga ner Poison ivy. Är ju en av dom bästa som finns där ute...om inte den bästa.
Maou
Riktigt nice guide smile.gif
Men om jag fattat allt rätt som du kanske inte beskrev är alltså att först måste man kryptera datasektionen med XOR och sedan lägga in XOR-dekrypt rutinen i ollydbg?
Håller på att försöka skriva en egen crypter just nu men det är svårt att få tag i bra guider :/

Men är C det bästa valet för att skriva en krypter i om man är van vid c++/c#/java? vad jag har förstått så har inte C++ stöd för ASM kod direkt i källkoden, vilket vanliga C har.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2012 Invision Power Services, Inc.