hacktricks/reversing/reversing-tools-basic-methods/README.md
2024-02-11 02:13:58 +00:00

22 KiB

Zana za Kugeuza na Mbinu za Msingi

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

Njia nyingine za kusaidia HackTricks:

Pata udhaifu unaowajali zaidi ili uweze kuzirekebisha haraka. Intruder inafuatilia eneo lako la shambulio, inafanya uchunguzi wa vitisho wa kujitokeza, inapata masuala katika mfumo wako wa teknolojia mzima, kutoka kwa APIs hadi programu za wavuti na mifumo ya wingu. Jaribu bure leo.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Zana za Kugeuza kwa Kutumia ImGui

Programu:

Kugeuza Wasm / Kompila Wat

Mkondoni:

Programu:

Kugeuza .Net

dotPeek

dotPeek ni kigeuzi ambacho kinageuza na kuchunguza muundo mbalimbali, ikiwa ni pamoja na maktaba (.dll), faili za metadata za Windows (.winmd), na utekelezaji (.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 ya hayo, dotPeek hutoa urambazaji rahisi kote kwenye msimbo uliogeuzwa, hivyo kuifanya kuwa moja ya zana kamili kwa uchambuzi wa algorithm za Xamarin.

.Net Reflector

Na mfano kamili wa kuongeza na API inayotanua zana ili kukidhi mahitaji yako halisi, .NET reflector hupunguza muda na kusaidia maendeleo. Hebu tuangalie huduma nyingi za uhandisi wa nyuma ambazo zana hii hutoa:

  • Hutoa ufahamu juu ya jinsi data inavyosafiri kupitia maktaba au sehemu
  • Hutoa ufahamu juu ya utekelezaji na matumizi ya lugha na fremu za .NET
  • Hupata utendaji usioelezewa na usiofunuliwa ili kupata zaidi kutoka kwa APIs na teknolojia zinazotumiwa.
  • Hupata tegemezi na makusanyo tofauti
  • Inapatia eneo sahihi la makosa katika msimbo wako, sehemu za tatu, na maktaba.
  • Inafuatilia chanzo cha msimbo wote wa .NET unavyofanya kazi.

ILSpy & dnSpy

Programu-jalizi ya ILSpy kwa Visual Studio Code: Unaweza kuwa nayo kwenye mfumo wowote (unaweza kuweka moja kwa moja kutoka VSCode, hakuna haja ya kupakua git. Bonyeza Extensions na tafuta ILSpy).
Ikiwa unahitaji kugeuza, kubadilisha na kugeuza tena unaweza kutumia: https://github.com/0xd4d/dnSpy/releases (Bonyeza Kulia -> Badilisha Njia kubadilisha kitu ndani ya kazi).
Unaweza pia kujaribu https://www.jetbrains.com/es-es/decompiler/

Kuingiza Kumbukumbu ya DNSpy

Ili kufanya DNSpy iweke kumbukumbu baadhi ya habari kwenye faili, unaweza kutumia mistari hii ya .Net:

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

Uchunguzi wa DNSpy

Ili kuchunguza kificho kwa kutumia DNSpy unahitaji:

Kwanza, badilisha sifa za Kusanyiko zinazohusiana na uchunguzi:

[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 kwenye File >> Save module...:

Hii ni muhimu kwa sababu ikiwa hautafanya hivyo, wakati wa runtime maboresho kadhaa yatafanywa kwenye nambari na inaweza kuwa iwezekanavyo kwamba wakati wa kudebugiwa break-point haitafikiwa kamwe au baadhi ya variables hazipo.

Kisha, ikiwa programu yako ya .Net inaendeshwa na IIS unaweza kuirejesha kwa kubonyeza:

iisreset /noforce

Kisha, ili kuanza kurekebisha makosa, unapaswa kufunga faili zote zilizofunguliwa na ndani ya Kichupo cha Kurekebisha chagua Weka kwenye Mchakato...:

Kisha chagua w3wp.exe ili kuunganisha kwenye seva ya IIS na bonyeza unganisha:

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

Bonyeza moduli yoyote kwenye Moduli na chagua Fungua Moduli Zote:

Bonyeza kulia kwenye moduli yoyote katika Mtafuta wa Makusanyo na bonyeza Panga Makusanyo:

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 "Suspend on library load/unload"

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

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

Lakini, jinsi gani unaweza kufikia nambari ya DLL iliyopakiwa? Kwa 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 --> Mipangilio na chagua "DLL Entry".
  • Kisha anza utekelezaji, kurekebisha itasimama kwa kila dll kuu, wakati fulani utasimama kwenye Kuingia kwa dll yako. Kutoka hapo, tafuta tu sehemu ambapo unataka kuweka alama ya kusimamisha.

Tambua kuwa wakati utekelezaji unaposimamishwa kwa sababu yoyote katika win64dbg unaweza kuona katika nambari gani uko ukitazama juu ya dirisha la win64dbg:

Kisha, ukitazama hii unaweza kuona wakati utekelezaji ulisimamishwa 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 unaotumika na kuzibadilisha. Habari zaidi katika:

{% content-ref url="cheat-engine.md" %} cheat-engine.md {% endcontent-ref %}

ARM & MIPS

{% embed url="https://github.com/nongiach/arm_now" %}

Shellcodes

Kurekebisha shellcode na blobrunner

Blobrunner ita tenga shellcode ndani ya nafasi ya kumbukumbu, itakuonyesha anwani ya kumbukumbu ambapo shellcode ilipangiwa na itasimamisha utekelezaji.
Kisha, unahitaji kuunganisha kurekebisha (Ida au x64dbg) kwenye mchakato na kuweka alama ya kusimamisha kwenye anwani ya kumbukumbu iliyotajwa na kuendelea utekelezaji. Kwa njia hii utakuwa unarekebisha shellcode.

Ukurasa wa kutolewa wa github una vifurushi vilivyopakuliwa: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5
Unaweza kupata toleo lililobadilishwa kidogo la Blobrunner kwenye kiunga kifuatacho. Ili kuipachika tu unda mradi wa C/C++ katika Visual Studio Code, nakili na ubandike nambari na ijenge.

{% content-ref url="blobrunner.md" %} blobrunner.md {% endcontent-ref %}

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 kuunganisha kurekebisha kwenye mchakato, cheza anza subiri sekunde 2-5 na bonyeza simama na utakuta uko ndani ya mzunguko wa milele. Ruka kwa maagizo inayofuata ya mzunguko wa milele kwani itakuwa wito kwa shellcode, na hatimaye utakuta unatekeleza shellcode.

Unaweza kupakua toleo lililopakuliwa la jmp2it kwenye ukurasa wa kutolewa.

Kurekebisha shellcode kwa kutumia Cutter

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

Tambua kuwa Cutter inakuwezesha "Fungua Faili" na "Fungua Shellcode". Katika kesi yangu wakati nilipofungua shellcode kama faili ilikuwa imefichuliwa kwa usahihi, lakini wakati nilipofungua kama shellcode haikuwa:

Ili kuanza uigaji katika mahali unapotaka, weka alama hapo na inaonekana cutter itaanza uigaji kiotomatiki kutoka hapo:

Unaweza kuona steki kwa mfano ndani ya kumbukumbu ya hex:

Kufuta shellcode na kupata kazi zilizotekelezwa

Unapaswa kujaribu scdbg.
Itakuambia mambo kama kazi zipi shellcode inatumia na ikiwa shellcode inajitafsiri 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 kipengele cha kuzindua kwa picha ambapo unaweza kuchagua chaguo unayotaka na kutekeleza shellcode

Chaguo la Tengeneza Dump litatengeneza dump ya shellcode ya mwisho ikiwa kuna mabadiliko yoyote yanayofanywa kwa shellcode kwa njia ya kumbukumbu (inatumika kupakua shellcode iliyohifadhiwa). Kianzia cha kuanza kinaweza kuwa na manufaa kuanza shellcode kwenye kianzia maalum. Chaguo la Kagua Shell ni muhimu kwa kuchunguza shellcode kwa kutumia terminal ya scDbg (hata hivyo, ninaona chaguo zingine zilizoelezwa hapo awali kuwa bora kwa suala hili kwani utaweza kutumia Ida au x64dbg).

Kuchambua kwa kutumia CyberChef

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

Movfuscator

Obfuscator huyu hubadilisha maagizo yote ya mov (ndiyo, ni nzuri sana). Pia hutumia kuvuruga kutekeleza mzunguko. Kwa maelezo zaidi kuhusu jinsi inavyofanya kazi:

Ikiwa una bahati, demovfuscator itaweza kufuta ufusaji wa faili. 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

Tafuta udhaifu unaofaa zaidi ili uweze kuzirekebisha haraka. Intruder inafuatilia eneo lako la shambulio, inafanya uchunguzi wa vitisho wa kujitolea, inapata masuala katika mfumo wako wa teknolojia mzima, kutoka kwa APIs hadi programu za wavuti na mifumo ya wingu. Jaribu bure leo.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Rust

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

Katika kesi hii, faili ya binary ilikuwa inaitwa authenticator, kwa hivyo ni wazi kabisa kuwa hii ndio kazi kuu inayovutia.
Ukiwa na jina la kazi zinazoitwa, tafuta kuhusu vipengele vyao na matokeo kwenye mtandao.

Delphi

Kwa faili za binary zilizopangwa kwa Delphi, unaweza kutumia https://github.com/crypto2011/IDR

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

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

Programu-jalizi hii itatekeleza faili ya binary na kutatua majina ya kazi kwa njia ya kudumu mwanzoni mwa uchunguzi. Baada ya kuanza uchunguzi, bonyeza tena kitufe cha Kuanza (kijani au f9) na kizuizi kitagonga mwanzoni mwa namna halisi ya kificho.

Pia ni ya kuvutia sana kwa sababu ikiwa bonyeza kitufe katika programu ya picha, kizuizi kitasimama katika kazi inayotekelezwa na kitufe hicho.

Golang

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

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

Hii itatatua majina ya kazi.

Python Iliyopangwa

Katika ukurasa huu unaweza kupata jinsi ya kupata nambari ya python kutoka kwa faili ya binary iliyopangwa kwa ELF/EXE:

{% content-ref url="../../forensics/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md" %} .pyc.md {% endcontent-ref %}

GBA - Game Body Advance

Ikiwa unapata binary ya mchezo wa GBA, unaweza kutumia zana tofauti kwa kuiga na kuchunguza:

Katika no$gba, katika Options --> Emulation Setup --> Controls** ** unaweza kuona jinsi ya kubonyeza vitufe vya Game Boy Advance

Unapobonyeza, kila funguo lina thamani ya kuitambulisha:

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 kuingia kwa mtumiaji. Katika anwani 0x4000130 utapata kazi inayopatikana kawaida: KEYINPUT.

Katika picha iliyotangulia, unaweza kuona kuwa kazi inaitwa kutoka FUN_080015a8 (anwani: 0x080015fa na 0x080017ac).

Katika kazi hiyo, baada ya shughuli 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 nambari hii:

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) {

If-ya mwisho inachunguza uVar4 iko kwenye funguo za mwisho na sio funguo ya sasa, inayoitwa pia kuacha kushikilia 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 kinasafisha skrini
  • Kisha, inalinganishwa na thamani 8 (kitufe cha START): Katika changamoto hii inathibitisha ikiwa msimbo ni sahihi ili kupata bendera.
  • Katika kesi hii, var DAT_030000d8 inalinganishwa na 0xf3 na ikiwa thamani ni sawa, msimbo fulani unatekelezwa.
  • Katika kesi zingine, inachunguzwa cont (DAT_030000d4). Ni cont kwa sababu inaongeza 1 mara tu baada ya kuingia kwenye msimbo.
    Ikiwa ni chini ya 8, kitu kinachohusiana na kuongeza thamani kwa **DAT_030000d8 ** kinafanyika (kimsingi inaongeza thamani za vitufe vilivyobonyezwa kwenye kipekee hiki kama muda mrefu kama cont ni chini ya 8).

Kwa hivyo, katika changamoto hii, kwa kujua thamani za vitufe, ulihitaji kubonyeza mchanganyiko wenye urefu mdogo kuliko 8 ambao matokeo ya kuongeza ni 0xf3.

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

Game Boy

{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}

Kozi

Tafuta udhaifu unaowajali zaidi ili uweze kuyatatua haraka. Intruder inafuatilia eneo lako la shambulio, inatekeleza uchunguzi wa vitisho wa kujitokeza, inapata masuala katika mfumo wako wa teknolojia mzima, kutoka kwa APIs hadi programu za wavuti na mifumo ya wingu. Jaribu bure leo.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

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

Njia zingine za kusaidia HackTricks: