<summary><strong>Leer AWS-hacking van nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
Vind kwesbaarhede wat die belangrikste is sodat jy dit vinniger kan regstel. Intruder volg jou aanvalsoppervlak, voer proaktiewe dreigingsskanderings uit, vind probleme regoor jou hele tegnologie-stapel, van API's tot webtoepassings en wolkstelsels. [**Probeer dit vandag nog gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
* Gebruik [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) om van wasm (binêre) na wat (duidelike teks) te **ontleed**
* Gebruik [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) om van wat na wasm te **kompileer**
* Jy kan ook probeer om [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) te gebruik om te ontleed
dotPeek is 'n ontleder wat **ontleed en ondersoek doen na verskeie formate**, insluitend **biblioteke** (.dll), **Windows-metadata-lêers** (.winmd) en **uitvoerbare lêers** (.exe). Nadat dit ontleed is, kan 'n samestelling as 'n Visual Studio-projek (.csproj) gestoor word.
Die voordeel hiervan is dat as 'n verlore bronkode herstel moet word uit 'n ouerwetse samestelling, kan hierdie aksie tyd bespaar. Verder bied dotPeek handige navigasie deur die ontleedde kode, wat dit een van die perfekte hulpmiddels maak vir **Xamarin-algoritmeanalise.** 
Met 'n omvattende byvoegingsmodel en 'n API wat die hulpmiddel uitbrei om aan jou presiese behoeftes te voldoen, bespaar .NET reflector tyd en vereenvoudig ontwikkeling. Kom ons kyk na die oorvloed van omgekeerde ingenieursdienste wat hierdie hulpmiddel bied:
[ILSpy-inprop vir Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Jy kan dit hê op enige bedryfstelsel (jy kan dit direk vanaf VSCode installeer, geen nodig om die git af te laai nie. Klik op **Extensions** en **search ILSpy**).\
As jy moet **ontleed**, **verander** en **weer saamstel**, kan jy gebruik maak van: [**https://github.com/0xd4d/dnSpy/releases**](https://github.com/0xd4d/dnSpy/releases) (**Right Click -> Modify Method** om iets binne 'n funksie te verander).\
Jy kan ook [https://www.jetbrains.com/es-es/decompiler/](https://www.jetbrains.com/es-es/decompiler/) probeer.
Hierdie gids bevat 'n oorsig van basiese metodes en gereedskap wat gebruik word vir omgekeerde ingenieurswese. Hierdie metodes en gereedskap kan jou help om die werking van sagteware en hardeware te ontleed en te verstaan.
## Inhoudsopgawe
- [Wat is omgekeerde ingenieurswese?](#wat-is-omgekeerde-ingenieurswese)
- [Basiese metodes vir omgekeerde ingenieurswese](#basiese-metodes-vir-omgekeerde-ingenieurswese)
- [Gereedskap vir omgekeerde ingenieurswese](#gereedskap-vir-omgekeerde-ingenieurswese)
- [Aanbevole bronne](#aanbevole-bronne)
## Wat is omgekeerde ingenieurswese?
Omgekeerde ingenieurswese is die proses om 'n produk, sagteware of hardeware te ontled en te verstaan om die interne werking daarvan te bepaal. Dit behels die ontleed van binêre kode, ontleding van algoritmes en die identifisering van funksies en datastrukture binne die program.
## Basiese metodes vir omgekeerde ingenieurswese
Hier is 'n paar basiese metodes wat gebruik word vir omgekeerde ingenieurswese:
- **Stap-vir-stap ontleding**: Hierdie metode behels die stapsgewyse ontleding van die program deur die kode te ontleed en die funksies en datastrukture te identifiseer.
- **Statiese ontleding**: Hierdie metode behels die ontleding van die program sonder om dit uit te voer. Dit kan gedoen word deur die bronkode te bestudeer, die program te ontleed met behulp van gereedskap soos disassemblers en dekompilers, en die program te analiseer vir kwesbaarhede en beveiligingslekke.
- **Dinamiese ontleding**: Hierdie metode behels die uitvoering van die program in 'n geïsoleerde omgewing en die monitering van die program se gedrag. Dit kan gedoen word deur die program te hardloop in 'n virtuele masjien of 'n debugger te gebruik om die program te ontleed terwyl dit uitgevoer word.
- **Ontleding van netwerkverkeer**: Hierdie metode behels die ontleding van die netwerkverkeer tussen 'n toepassing en die bedieners waarmee dit kommunikeer. Dit kan gedoen word deur die netwerkverkeer te onderskep en te analiseer om inligting soos protokolle, versleuteling en data-uitruiling te verkry.
## Gereedskap vir omgekeerde ingenieurswese
Hier is 'n paar gereedskap wat gebruik kan word vir omgekeerde ingenieurswese:
- **Disassemblers**: Hierdie gereedskap ontleed die masjienkode van 'n program en vertaal dit na leesbare instruksies.
- **Dekompilers**: Hierdie gereedskap ontleed die uitvoerbare kode van 'n program en vertaal dit na bronkode.
- **Debugger**: Hierdie gereedskap maak dit moontlik om 'n program te ontleed terwyl dit uitgevoer word deur die program stap vir stap te deurloop en die waardes van veranderlikes en geheue-adresse te ondersoek.
- **Ontleders vir netwerkverkeer**: Hierdie gereedskap maak dit moontlik om die netwerkverkeer tussen 'n toepassing en die bedieners te ontleed en te analiseer.
Dit is nodig omdat as jy dit nie doen nie, sal verskeie **optimalisering** op die kode by **uitvoering** toegepas word en dit moontlik wees dat 'n **breekpunt nooit getref word** of sommige **veranderlikes nie bestaan nie**.
Nou dat ons die proses aan die debuggen is, is dit tyd om dit te stop en al die modules te laai. Klik eers op _Debug >> Break All_ en dan klik op _**Debug >> Windows >> Modules**_:
Dan, wanneer jy begin met debuggen, sal die uitvoering gestop word wanneer elke DLL gelaai word. Wanneer rundll32 jou DLL laai, sal die uitvoering gestop word.
* **Laai rundll32** (64-bits in C:\Windows\System32\rundll32.exe en 32-bits in C:\Windows\SysWOW64\rundll32.exe)
* **Verander die opdraglyn** ( _File --> Change Command Line_ ) en stel die pad van die dll en die funksie wat jy wil oproep, byvoorbeeld: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
* Verander _Options --> Settings_ en kies "**DLL Entry**".
* Begin dan met die uitvoering, die debugger sal by elke dll hoof stop, op 'n punt sal jy stop in die dll Entry van jou dll. Van daar af, soek net na die punte waar jy 'n breekpunt wil plaas.
Let daarop dat wanneer die uitvoering om enige rede in win64dbg gestop word, kan jy sien **in watter kode jy is** deur na die **bo-kant van die win64dbg-venster** te kyk:
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) is 'n nuttige program om te vind waar belangrike waardes binne die geheue van 'n lopende spel gestoor word en om hulle te verander. Meer inligting in:
[**Blobrunner**](https://github.com/OALabs/BlobRunner) sal die **shellkode** toewys binne 'n geheue-ruimte, sal jou die **geheue-adres** waar die shellkode toegewys is, aandui en die uitvoering **stop**.\
Dan moet jy 'n debugger (Ida of x64dbg) aan die proses heg en 'n breekpunt by die aangeduide geheue-adres plaas en die uitvoering hervat. Op hierdie manier sal jy die shellkode debug.
Die github-bladsy met vrylatings bevat zip-lêers wat die saamgestelde vrylatings bevat: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
Jy kan 'n effens gewysigde weergawe van Blobrunner in die volgende skakel vind. Om dit saam te stel, skep net 'n C/C++-projek in Visual Studio Code, kopieer en plak die kode en bou dit.
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)is baie soortgelyk aan blobrunner. Dit sal die **shellkode** toewys binne 'n geheue-ruimte en 'n **ewige lus** begin. Jy moet dan die debugger aan die proses heg, begin speel, 2-5 sekondes wag en stop druk, en jy sal jouself binne die **ewige lus** bevind. Spring na die volgende instruksie van die ewige lus, want dit sal 'n oproep na die shellkode wees, en uiteindelik sal jy die shellkode uitvoer.
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) is die GUI van radare. Met cutter kan jy die shellkode emuleer en dit dinamies ondersoek.
Let daarop dat Cutter jou toelaat om "Open File" en "Open Shellcode" te doen. In my geval, toe ek die shellkode as 'n lêer oopgemaak het, het dit dit korrek ontleed, maar toe ek dit as 'n shellkode oopgemaak het, het dit nie:
Die **Create Dump** opsie sal die finale shellcode dump as daar enige verandering aan die shellcode dinamies in die geheue gedoen word (nuttig om die gedekodeerde shellcode af te laai). Die **start offset** kan nuttig wees om die shellcode te begin by 'n spesifieke offset. Die **Debug Shell** opsie is nuttig om die shellcode te debug met behulp van die scDbg-terminal (ek vind egter enige van die opsies wat voorheen verduidelik is beter vir hierdie doel, omdat jy Ida of x64dbg kan gebruik).
Laai jou shellcode-lêer as insette op en gebruik die volgende resep om dit te dekomponeer: [https://gchq.github.io/CyberChef/#recipe=To\_Hex('Space',0)Disassemble\_x86('32','Full%20x86%20architecture',16,0,true,true)](https://gchq.github.io/CyberChef/#recipe=To\_Hex\('Space',0\)Disassemble\_x86\('32','Full%20x86%20architecture',16,0,true,true\))
Hierdie obfuscator **verander alle instruksies vir `mov`** (ja, regtig cool). Dit gebruik ook onderbrekings om uitvoervloeie te verander. Vir meer inligting oor hoe dit werk:
En [installeer keystone](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`)
As jy 'n **CTF speel, kan hierdie omweg om die vlag te vind** baie nuttig wees: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)
Vind kwesbaarhede wat die belangrikste is sodat jy hulle vinniger kan regmaak. Intruder volg jou aanvalsoppervlak, voer proaktiewe dreigingsskanderings uit, vind probleme regoor jou hele tegnologie-stapel, van API's tot webtoepassings en wolkstelsels. [**Probeer dit vandag gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
As jy 'n Delphi binêre lêer moet omkeer, sal ek voorstel dat jy die IDA-inprop [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi) gebruik
Hierdie inprop sal die binêre lêer uitvoer en funksienames dinamies oplos aan die begin van die foutopsporing. Druk na die begin van die foutopsporing weer die Begin-knoppie (die groen een of f9) en 'n breekpunt sal tref aan die begin van die regte kode.
Dit is ook baie interessant omdat as jy 'n knoppie in die grafiese toepassing druk, sal die foutopspoorprogram in die funksie stop wat deur daardie knoppie uitgevoer word.
As jy 'n Golang binêre lêer moet omkeer, sal ek voorstel dat jy die IDA-inprop [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper) gebruik
In [**no$gba**](https://problemkaputt.de/gba.htm), in _**Options --> Emulation Setup --> Controls**_\*\* \*\* kan jy sien hoe om die Game Boy Advance **knoppies** te druk
So, in hierdie tipe programme, sal die interessante deel wees **hoe die program die gebruiker se insette hanteer**. In die adres **0x4000130** sal jy die algemeen gevonde funksie vind: **KEYINPUT.**
Die laaste if-stelling kontroleer of `uVar4` in die laaste sleutels is en nie die huidige sleutel nie, wat ook genoem word om 'n knoppie los te laat (die huidige sleutel word gestoor in `uVar1`).
* Eerstens word dit vergelyk met die **waarde 4** (**SELECT**-knoppie): In die uitdaging vee hierdie knoppie die skerm skoon.
* Daarna word dit vergelyk met die **waarde 8** (**START**-knoppie): In die uitdaging word hierdie knoppie gebruik om te kyk of die kode geldig is om die vlag te kry.
* In hierdie geval word die var **`DAT_030000d8`** vergelyk met 0xf3 en as die waarde dieselfde is, word sekere kode uitgevoer.
* In enige ander gevalle word daar gekyk na 'n kont (`DAT_030000d4`). Dit is 'n kont omdat dit 1 byvoeg net nadat die kode ingegaan is.\
As dit minder as 8 is, word iets wat die byvoeging van waardes by \*\*`DAT_030000d8` \*\* behels, gedoen (basies word die waardes van die gedrukte sleutels in hierdie veranderlike bygevoeg solank die kont minder as 8 is).
Dus moes jy in hierdie uitdaging, met kennis van die waardes van die knoppies, **'n kombinasie indruk met 'n lengte kleiner as 8 sodat die resulterende byvoeging 0xf3 is.**
Vind kwesbaarhede wat die belangrikste is sodat jy dit vinniger kan regmaak. Intruder volg jou aanvalsoppervlak, voer proaktiewe dreigingsskanderings uit, vind probleme regoor jou hele tegnologie-stapel, van API's tot webtoepassings en wolkstelsels. [**Probeer dit vandag gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks).
<summary><strong>Leer AWS-hacking van nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* As jy jou **maatskappy in HackTricks wil adverteer** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.