21 KiB
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:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA USAJILI!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Kikundi cha Usalama cha Try Hard
{% embed url="https://discord.gg/tryhardsecurity" %}
Zana za Kugeuza Zilizotegemea ImGui
Programu:
- ReverseKit: https://github.com/zer0condition/ReverseKit
Msanidi wa Wasm / Msanidi wa Wat
Mtandaoni:
- Tumia https://webassembly.github.io/wabt/demo/wasm2wat/index.html kwa kugeuza kutoka kwa wasm (binary) hadi wat (maandishi wazi)
- Tumia https://webassembly.github.io/wabt/demo/wat2wasm/ kwa kuunda kutoka kwa wat hadi wasm
- unaweza pia kujaribu kutumia https://wwwg.github.io/web-wasmdec/ kwa kugeuza
Programu:
Msanidi wa .NET
dotPeek
dotPeek ni msanidi wa kugeuza ambao hufanya kugeuza 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 ya hayo, dotPeek hutoa urambazaji wa manufaa kote kwenye msimbo uliogeuzwa, ikifanya iwe moja ya zana kamili kwa uchambuzi wa algorithm wa Xamarin.
.NET Reflector
Kwa mfano wa kuongeza wa kina na API inayozidisha zana kulingana na mahitaji yako halisi, .NET reflector hupunguza muda na kufanya maendeleo kuwa rahisi. Hebu tuangalie huduma nyingi za uhandisi wa kurudi 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 & dnSpy
ILSpy plugin kwa Visual Studio Code: Unaweza kuwa nayo kwenye OS yoyote (unaweza kuweka 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 kwa sasa la dnSpyEx. (Bonyeza Kulia -> Badilisha Mbinu kubadilisha kitu ndani ya kazi).
Uchakataji wa DNSpy
Ili kufanya DNSpy iloge 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 nambari kwa kutumia DNSpy unahitaji:
Kwanza, badilisha Vipengele vya Mkusanyiko vinavyohusiana na kurekebisha:
[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 don't exist.
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 Kichupo cha Kurekebisha chagua Ambatanisha kwa Mchakato...:
Kisha chagua w3wp.exe kuambatisha kwenye seva ya IIS na bonyeza ambatanisha:
Sasa tukiwa tunarekebisha mchakato, ni wakati wa kuusitisha na kupakia moduli zote. Kwanza bonyeza Kurekebisha >> Sitisha Yote kisha bonyeza Kurekebisha >> Windows >> Moduli:
Bonyeza moduli yoyote kwenye Moduli na chagua Fungua Moduli Zote:
Bonyeza kulia moduli yoyote katika 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 "Sitisha kwenye upakiaji/utoaji wa maktaba"
- Sanidi parameta za utekelezaji ukiweka njia ya DLL na kazi unayotaka kuita:
Kisha, unapoanza kurekebisha utekelezaji utasimamishwa kila DLL inapopakiwa, basi, wakati rundll32 inapopakia DLL yako utekelezaji utasimamishwa.
Lakini, unawezaje kufikia namna ya kificho cha 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 anza utekelezaji, kifanyi cha kurekebisha kitasimama kwenye kila kifurushi cha dll, 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 kificho unachotazama katika 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:
{% 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 kuambatanisha kifanyi cha kurekebisha (Ida au x64dbg) kwenye mchakato na weka kiungo cha kusitisha kwenye anwani ya kumbukumbu iliyotajwa na endelea utekelezaji. Hivi ndivyo utakavyokuwa unarekebisha shellcode.
Ukurasa wa kutolewa kwenye github una zip zinazojumuisha kutolewa kwa kutekelezwa: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5
Unaweza kupata toleo lililobadilishwa kidogo la Blobrunner kwenye kiungo kifuatacho. Ili kulipachika tu unda mradi wa C/C++ katika Visual Studio Code, nakili na ubandike kificho na ujenge.
{% 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 kuambatanisha kifanyi cha kurekebisha kwenye mchakato, anza kucheza 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 hatimaye utajikuta unatekeleza shellcode.
Unaweza kupakua toleo lililobadilishwa la jmp2it kwenye ukurasa wa kutolewa.
Kurekebisha shellcode 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 ilikuwa imefanyiwa decompile kwa usahihi, lakini nilipoifungua kama shellcode haikufanya hivyo:
Ili kuanza uigaji katika mahali unapotaka, weka bp hapo na kwa mujibu wa cutter itaanza moja kwa moja uigaji kutoka hapo:
Unaweza kuona stakiti kwa mfano ndani ya kumbukumbu ya hex:
Kufuta shellcode na kupata kazi zilizotekelezwa
Unapaswa kujaribu scdbg.
Itakwambia mambo kama kazi zipi shellcode inatumia na ikiwa shellcode inajichimbua 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 unalotaka na kutekeleza shellcode
Chaguo la Unda Dump litadump shellcode ya mwisho ikiwa kuna mabadiliko yoyote yanayofanywa kwa shellcode kwa njia ya kumbukumbu (inayoweza kutumiwa kupakua shellcode iliyofanyiwa decoding). 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)
Movfuscator
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:
- https://www.youtube.com/watch?v=2VF_wPkiBJY
- https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf
Ikiwa una bahati demovfuscator itadefuscate 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 na manufaa 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 ni kazi kuu inayovutia.
Ukiwa na jina la kazi zinazoitwa, tafuta kuhusu hizo kwenye Mtandao ili kujifunza kuhusu matokeo yao na matokeo yao.
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 itagonga mwanzoni mwa kanuni halisi.
Pia ni ya kuvutia sana kwa sababu ikiwa bonyeza kitufe katika programu ya kielelezo, 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:
{% content-ref url="../../generic-methodologies-and-resources/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:
- no$gba (Pakua toleo la kuchunguza) - Ina mchunguzi na kiolesura
- mgba - Ina mchunguzi wa CLI
- gba-ghidra-loader - Programu-jalizi ya Ghidra
- GhidraGBA - Programu-jalizi ya Ghidra
Katika no$gba, katika Chaguo --> Wekaanishaji wa Kuiga --> Vidhibiti** ** unaweza kuona jinsi ya kubonyeza vitufe vya Game Boy Advance
Vinapobonyezwa, kila kitufe kina thamani ya kuwatambua:
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 awali (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 code:
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 inachunguza 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
) inachunguzwa. Ni cont kwa sababu inaongeza 1 mara tu baada ya kuingia katika msimbo.
Ikiwa ni chini ya 8 kitu kinachohusisha kuongeza thamani kwa **DAT_030000d8
** kinachofanywa (kimsingi inaongeza thamani za vitufe vilivyobonyezwa katika hii variable muda mrefu kama cont iko 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.
Kumbukumbu kwa mafunzo haya: https://exp.codes/Nostalgia/
Game Boy
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
Kozi
- https://github.com/0xZ0F/Z0FCourse_ReverseEngineering
- https://github.com/malrev/ABD (Ufumbuzi wa binary)
Kikundi cha Usalama cha Kujitahidi
{% embed url="https://discord.gg/tryhardsecurity" %}
Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud github repos.