Reversing Tools & Basic Methods

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Kikundi cha Usalama cha Try Hard


Vyombo vya Kugeuza vilivyotegemea ImGui

Programu:

Msanidi wa Wasm / Msanidi wa Wat

Mtandaoni:

Programu:

Msanidi wa .NET

dotPeek ni msanidi wa kugeuza ambao hugeuza na kuchunguza muundo mbalimbali, ikiwa ni pamoja na maktaba (.dll), faili za metadata za Windows (.winmd), na programu za kutekelezwa (.exe). Mara baada ya kugeuzwa, mkusanyiko unaweza kuokolewa kama mradi wa Visual Studio (.csproj).

Faida hapa ni kwamba ikiwa msimbo wa chanzo uliopotea unahitaji kurejeshwa kutoka kwa mkusanyiko wa zamani, hatua hii inaweza kuokoa muda. Zaidi, dotPeek hutoa urambazaji wa manufaa kote kwenye msimbo uliogeuzwa, ikifanya kuwa moja ya zana kamili kwa uchambuzi wa algorithm za Xamarin.

Kwa mfano wa kuongeza wa kina na API inayozidisha zana ili kufaa mahitaji yako halisi, .NET reflector hupunguza muda na kusahilisha maendeleo. Hebu tuangalie huduma nyingi za uhandisi wa nyuma ambazo zana hii hutoa:

  • Hutoa ufahamu jinsi data inavyopita kupitia maktaba au sehemu

  • Hutoa ufahamu wa utekelezaji na matumizi ya lugha na fremu za .NET

  • Hupata utendaji usioelezwa na usiofunuliwa ili kupata zaidi kutoka kwa APIs na teknolojia zilizotumiwa.

  • Hupata tegemezi na makusanyo tofauti

  • Inagundua mahali sahihi ya makosa katika msimbo wako, vipengele vya tatu, na maktaba.

  • Hufanya uchunguzi wa kina wa chanzo cha msimbo wote wa .NET unaoendelea.

ILSpy programu-jalizi kwa Visual Studio Code: Unaweza kuwa nayo kwenye OS yoyote (unaweza kuisakinisha moja kwa moja kutoka VSCode, hakuna haja ya kupakua git. Bonyeza Extensions na tafuta ILSpy). Ikiwa unahitaji kugeuza, kurekebisha na kuunda tena unaweza kutumia dnSpy au tawi linalotunzwa kikamilifu la hiyo, dnSpyEx. (Bonyeza Kulia -> Badilisha Mbinu kubadilisha kitu ndani ya kazi).

Uchakataji wa DNSpy

Ili kufanya DNSpy iwekeze baadhi ya habari kwenye faili, unaweza kutumia kificho hiki:

using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");

Kurekebisha DNSpy

Ili kurekebisha namna ya kufanya kazi ya kificho kwa kutumia DNSpy unahitaji:

Kwanza, badilisha Vipengele vya Utoaji vinavyohusiana na urekebishaji:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

Kwa:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]

Na bonyeza compile:

Kisha hifadhi faili mpya kupitia File >> Save module...:

Hii ni muhimu kwa sababu ikiwa hutafanya hivyo, wakati wa runtime maboresho kadhaa yatafanywa kwenye nambari na inaweza kuwa kwamba wakati wa kutatua hitilafu break-point is never hit au baadhi ya variables hazipo.

Kisha, ikiwa programu yako ya .NET inaendeshwa na IIS unaweza kurestart kwa:

iisreset /noforce

Kisha, ili kuanza kurekebisha hitilafu unapaswa kufunga faili zote zilizofunguliwa na ndani ya Tab ya Kurekebisha chagua Ambatanisha kwa Mchakato...:

Kisha chagua w3wp.exe kuambatisha kwenye seva ya IIS na bonyeza ambatanisha:

Sasa tukiwa tunarekebisha mchakato, ni wakati wa kuusimamisha na kupakia moduli zote. Kwanza bonyeza Kurekebisha >> Simamisha Yote kisha bonyeza Kurekebisha >> Windows >> Moduli:

Bonyeza moduli yoyote kwenye Moduli na chagua Fungua Moduli Zote:

Bonyeza kulia moduli yoyote kwenye Mtafuta wa Mkusanyiko na bonyeza Panga Mkusanyiko:

Java decompiler

https://github.com/skylot/jadx https://github.com/java-decompiler/jd-gui/releases

Kurekebisha DLLs

Kutumia IDA

  • Pakia rundll32 (64bits katika C:\Windows\System32\rundll32.exe na 32 bits katika C:\Windows\SysWOW64\rundll32.exe)

  • Chagua kurekebisha Windbg

  • Chagua "Sitishe wakati wa kupakia/kusitisha maktaba"

  • Sanidi parameta za utekelezaji ukiweka njia ya DLL na kazi unayotaka kuita:

Kisha, unapoanza kurekebisha utekelezaji utasimamishwa kila DLL inapopakiwa, kisha, wakati rundll32 inapopakia DLL yako utekelezaji utasimamishwa.

Lakini, unawezaje kufikia nambari ya DLL iliyopakiwa? Kutumia njia hii, sijui jinsi.

Kutumia x64dbg/x32dbg

  • Pakia rundll32 (64bits katika C:\Windows\System32\rundll32.exe na 32 bits katika C:\Windows\SysWOW64\rundll32.exe)

  • Badilisha Mstari wa Amri ( Faili --> Badilisha Mstari wa Amri ) na weka njia ya dll na kazi unayotaka kuita, kwa mfano: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\14.ridii_2.dll",DLLMain

  • Badilisha Chaguo --> Vipimo na chagua "Kuingia kwa DLL".

  • Kisha anzisha utekelezaji, kurekebisha itasimama kwa kila dll kuu, kwa wakati fulani utasimama kwenye kuingia kwa dll yako. Kutoka hapo, tafuta tu sehemu ambapo unataka kuweka kiungo cha kusitisha.

Tambua kwamba unapokuwa umesimamishwa kwa sababu yoyote katika win64dbg unaweza kuona katika nambari unapotazama juu ya dirisha la win64dbg:

Kisha, ukitazama hii unaweza kuona wakati utekelezaji uliposimamishwa kwenye dll unayotaka kurekebisha.

Programu za GUI / Michezo ya Video

Cheat Engine ni programu muhimu ya kutafuta mahali ambapo thamani muhimu zimehifadhiwa ndani ya kumbukumbu ya mchezo unaoendeshwa na kuzibadilisha. Taarifa zaidi katika:

pageCheat Engine

PiNCE ni zana ya mbele/urekebishaji wa nyuma kwa GNU Project Debugger (GDB), iliyolenga michezo. Walakini, inaweza kutumika kwa chochote kinachohusiana na urekebishaji wa nyuma

Decompiler Explorer ni mbele ya wavuti kwa idadi ya wadecompile. Huduma hii ya wavuti inakuwezesha kulinganisha matokeo ya wadecompile tofauti kwenye programu ndogo za kutekelezwa.

ARM & MIPS

Shellcodes

Kurekebisha shellcode na blobrunner

Blobrunner ita tenga shellcode ndani ya nafasi ya kumbukumbu, itaku onyesha anwani ya kumbukumbu ambapo shellcode ilipangiwa na itasimamisha utekelezaji. Kisha, unahitaji kuambatanisha kurekebisha (Ida au x64dbg) kwa mchakato na weka kiungo cha kusitisha kwenye anwani iliyotajwa ya kumbukumbu na endelea utekelezaji. Kwa njia hii utakuwa unarekebisha shellcode.

Ukurasa wa kutolewa wa github una zip zinazo zawiri kutolewa kwa kuchapishwa: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5 Unaweza kupata toleo lililobadilishwa kidogo la Blobrunner kwenye kiungo kifuatacho. Ili kukusanya tu unda mradi wa C/C++ katika Visual Studio Code, nakili na ubandike nambari na ujenge.

pageBlobrunner

Kurekebisha shellcode na jmp2it

jmp2it ni sawa sana na blobrunner. Ita tenga shellcode ndani ya nafasi ya kumbukumbu, na anza mzunguko wa milele. Kisha unahitaji kuambatanisha kurekebisha kwa mchakato, cheza anza subiri sekunde 2-5 na bonyeza kusimamisha na utajikuta ndani ya mzunguko wa milele. Ruka kwenye maagizo ijayo ya mzunguko wa milele kwani itakuwa wito kwa shellcode, na mwishowe utajikuta unatekeleza shellcode.

Unaweza kupakua toleo lililokusanywa la jmp2it kwenye ukurasa wa kutolewa.

Kurekebisha shellcode kwa kutumia Cutter

Cutter ni GUI ya radare. Kutumia cutter unaweza kuiga shellcode na kuichunguza kwa njia ya kudumu.

Tambua kwamba Cutter inakuruhusu "Fungua Faili" na "Fungua Shellcode". Kwa upande wangu nilipoifungua shellcode kama faili ilidecompile vizuri, lakini nilipoifungua kama shellcode haikufanya hivyo:

Ili kuanza uigaji mahali unapotaka, weka bp hapo na kwa kweli cutter itaanza moja kwa moja uigaji kutoka hapo:

Unaweza kuona stak kwa mfano ndani ya kumbukumbu ya hex:

Kufuta shellcode na kupata kazi zilizotekelezwa

Unapaswa kujaribu scdbg. Itakwambia mambo kama ni kazi zipi shellcode inatumia na ikiwa shellcode inajichimba yenyewe kwenye kumbukumbu.

scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
scdbg.exe -f shellcode -i -r #enable interactive hooks (file and network) and show analysis report at end of run
scdbg.exe -f shellcode -d #Dump decoded shellcode
scdbg.exe -f shellcode /findsc #Find offset where starts
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset

scDbg pia ina launcher ya kielelezo ambapo unaweza kuchagua chaguo unazotaka na kutekeleza shellcode

Chaguo la Unda Dump litadump shellcode ya mwisho ikiwa kuna mabadiliko yoyote yanayofanywa kwa shellcode kwa njia ya kumbukumbu (inayoweza kupakuliwa shellcode iliyofanywa). Kianzio cha kuanza kinaweza kuwa na manufaa kuanza shellcode kwenye kianzio maalum. Chaguo la Kianzio cha Kufuatilia ni muhimu kufuatilia shellcode kwa kutumia terminal ya scDbg (hata hivyo, ninaona chaguo lolote lililoelezwa hapo awali ni bora kwa suala hili kwani utaweza kutumia Ida au x64dbg).

Kufasiri kwa Kutumia CyberChef

Pakia faili yako ya shellcode kama kuingiza na tumia mapishi yafuatayo kudecompile: https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)

Obfuscator huyu hubadilisha maagizo yote kwa mov (ndio, kweli ni nzuri sana). Pia hutumia kuvuruga kubadilisha mifumo ya utekelezaji. Kwa maelezo zaidi kuhusu jinsi inavyofanya kazi:

Ikiwa una bahati demovfuscator itaondoa ufusaji wa binary. Ina tegemezi kadhaa

apt-get install libcapstone-dev
apt-get install libz3-dev

Na sakinisha keystone (apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install)

Ikiwa unacheza CTF, njia hii ya kupata bendera inaweza kuwa muhimu sana: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html

Rust

Ili kupata sehemu ya kuingia tafuta kazi kwa ::main kama hivi:

Katika kesi hii binary ilikuwa inaitwa authenticator, hivyo ni wazi kuwa hii ndio kazi kuu inayovutia. Ukiwa na jina la kazi zinazoitwa, tafuta kuhusu vifaa vyao na matokeo kwenye Intaneti.

Delphi

Kwa binaries zilizokompiliwa kwa Delphi unaweza kutumia https://github.com/crypto2011/IDR

Ikiwa unahitaji kubadilisha binary ya Delphi ningependekeza utumie programu-jalizi ya IDA https://github.com/Coldzer0/IDA-For-Delphi

Bonyeza ATL+f7 (ingiza programu-jalizi ya python kwenye IDA) na chagua programu-jalizi ya python.

Programu-jalizi hii itatekeleza binary na kutatua majina ya kazi kwa njia ya moja kwa moja mwanzoni mwa uchunguzi. Baada ya kuanza uchunguzi bonyeza tena kitufe cha Kuanza (kijani au f9) na kuvunja itafikia mwanzo wa nambari halisi.

Pia ni ya kuvutia sana kwa sababu ikiwa bonyeza kitufe katika programu ya kielelezo cha picha, mchunguzi utasimama kwenye kazi inayotekelezwa na kitufe hicho.

Golang

Ikiwa unahitaji kubadilisha binary ya Golang ningependekeza utumie programu-jalizi ya IDA https://github.com/sibears/IDAGolangHelper

Bonyeza ATL+f7 (ingiza programu-jalizi ya python kwenye IDA) na chagua programu-jalizi ya python.

Hii itatatua majina ya kazi.

Python iliyokompiliwa

Kwenye ukurasa huu unaweza kupata jinsi ya kupata nambari ya python kutoka kwa binary iliyokompiliwa ya ELF/EXE:

pageDecompile compiled python binaries (exe, elf) - Retreive from .pyc

GBA - Game Body Advance

Ikiwa unapata binary ya mchezo wa GBA unaweza kutumia zana tofauti kwa kuiga na kutatua hitilafu:

  • no$gba (Pakua toleo la kurekebisha hitilafu) - Ina kivinjari cha hitilafu na kiolesura

  • mgba - Ina kivinjari cha CLI

  • gba-ghidra-loader - Programu-jalizi ya Ghidra

  • GhidraGBA - Programu-jalizi ya Ghidra

Kwenye no$gba, katika Chaguo --> Wekaanishaji wa Kuiga --> Vidhibiti** ** unaweza kuona jinsi ya kubonyeza vitufe vya Game Boy Advance

Vinapobonyezwa, kila funguo lina thamani ya kumtambua:

A = 1
B = 2
SELECT = 4
START = 8
RIGHT = 16
LEFT = 32
UP = 64
DOWN = 128
R = 256
L = 256

Kwa hivyo, katika aina hii ya programu, sehemu ya kuvutia itakuwa jinsi programu inavyoshughulikia matokeo ya mtumiaji. Katika anwani 0x4000130 utapata kazi inayopatikana kawaida: KEYINPUT.

Katika picha iliyopita unaweza kuona kwamba kazi hiyo inaitwa kutoka FUN_080015a8 (anwani: 0x080015fa na 0x080017ac).

Katika kazi hiyo, baada ya operesheni za kuanzisha (bila umuhimu wowote):

void FUN_080015a8(void)

{
ushort uVar1;
undefined4 uVar2;
undefined4 uVar3;
ushort uVar4;
int iVar5;
ushort *puVar6;
undefined *local_2c;

DISPCNT = 0x1140;
FUN_08000a74();
FUN_08000ce4(1);
DISPCNT = 0x404;
FUN_08000dd0(&DAT_02009584,0x6000000,&DAT_030000dc);
FUN_08000354(&DAT_030000dc,0x3c);
uVar4 = DAT_030004d8;

Imepatikana hii nambari:

do {
DAT_030004da = uVar4; //This is the last key pressed
DAT_030004d8 = KEYINPUT | 0xfc00;
puVar6 = &DAT_0200b03c;
uVar4 = DAT_030004d8;
do {
uVar2 = DAT_030004dc;
uVar1 = *puVar6;
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {

Ikiwa uVar4 iko kwenye funguo za mwisho na sio funguo ya sasa, hii inaitwa kuachilia kitufe (funguo ya sasa imehifadhiwa katika uVar1).

if (uVar1 == 4) {
DAT_030000d4 = 0;
uVar3 = FUN_08001c24(DAT_030004dc);
FUN_08001868(uVar2,0,uVar3);
DAT_05000000 = 0x1483;
FUN_08001844(&DAT_0200ba18);
FUN_08001844(&DAT_0200ba20,&DAT_0200ba40);
DAT_030000d8 = 0;
uVar4 = DAT_030004d8;
}
else {
if (uVar1 == 8) {
if (DAT_030000d8 == 0xf3) {
DISPCNT = 0x404;
FUN_08000dd0(&DAT_02008aac,0x6000000,&DAT_030000dc);
FUN_08000354(&DAT_030000dc,0x3c);
uVar4 = DAT_030004d8;
}
}
else {
if (DAT_030000d4 < 8) {
DAT_030000d4 = DAT_030000d4 + 1;
FUN_08000864();
if (uVar1 == 0x10) {
DAT_030000d8 = DAT_030000d8 + 0x3a;

Katika msimbo uliopita unaweza kuona kwamba tunalinganisha uVar1 (mahali ambapo thamani ya kitufe kilichobonyezwa iko) na baadhi ya thamani:

  • Kwanza, inalinganishwa na thamani 4 (kitufe cha SELECT): Katika changamoto hii kitufe hiki husafisha skrini

  • Kisha, inalinganishwa na thamani 8 (kitufe cha START): Katika changamoto hii inathibitisha ikiwa msimbo ni halali kupata bendera.

  • Katika kesi hii, var DAT_030000d8 inalinganishwa na 0xf3 na ikiwa thamani ni sawa msimbo fulani unatekelezwa.

  • Katika kesi nyingine yoyote, baadhi ya cont (DAT_030000d4) inakaguliwa. Ni cont kwa sababu inaongeza 1 mara tu baada ya kuingia katika msimbo. Ikiwa chini ya 8 kitu kinahusisha kuongeza thamani kwa **DAT_030000d8 ** inafanywa (kimsingi inaongeza thamani za vitufe vilivyobonyezwa katika hii var kwa muda mrefu kama cont iko chini ya 8).

Hivyo, katika changamoto hii, kwa kujua thamani za vitufe, ulihitaji kubonyeza kombinisheni yenye urefu mdogo kuliko 8 ambayo matokeo ya kuongeza ni 0xf3.

Kumbukumbu kwa mafunzo haya: https://exp.codes/Nostalgia/

Game Boy

Kozi

Kikundi cha Usalama cha Kujaribu Kwa Bidii

Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated