retdec
wabt
retdec | wabt | |
---|---|---|
6 | 22 | |
7,798 | 6,442 | |
1.0% | 1.9% | |
7.0 | 8.3 | |
9 days ago | 7 days ago | |
C++ | C++ | |
MIT License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
retdec
-
need help with an old game trainer
found something called retdec @ https://github.com/avast/retdec
-
How to compile to make reverse engineering easy?
RetDec
-
rust to c complication?
https://github.com/avast/retdec (multiple machine code formats to C/C++)
-
CDDC 2022 in Thailand Outfield
// // This file was generated by the Retargetable Decompiler // Website: https://retdec.com // Copyright (c) Retargetable Decompiler // #include #include #include #include // ------------------------ Structures ------------------------ struct _IO_FILE { int32_t e0; }; // ------------------- Function Prototypes -------------------- int64_t __do_global_dtors_aux(void); int64_t __libc_csu_fini(void); int64_t __libc_csu_init(int64_t a1, int64_t a2, int64_t a3); int64_t _fini(void); int64_t _init(void); int64_t _start(int64_t a1, int64_t a2, int64_t a3, int64_t a4); int64_t deregister_tm_clones(void); int64_t frame_dummy(void); int32_t function_7b0(char * s1, char * s2, int32_t n); int32_t function_7c0(int64_t * ptr, int32_t size, int32_t n, struct _IO_FILE * stream); int32_t function_7d0(struct _IO_FILE * stream); void function_7e0(void); int32_t function_7f0(char * format, ...); char * function_800(char * s, int32_t n, struct _IO_FILE * stream); int32_t function_810(struct _IO_FILE * stream, char * buf, int32_t modes, int32_t n); struct _IO_FILE * function_820(char * filename, char * modes); void function_830(char * s); void function_840(int32_t status); void function_850(int64_t * d); int64_t readflag(void); int64_t register_tm_clones(void); // --------------------- Global Variables --------------------- int64_t g1 = 2400; // 0x200d70 int64_t g2 = 2336; // 0x200d78 struct _IO_FILE * g3 = NULL; // 0x201020 struct _IO_FILE * g4 = NULL; // 0x201030 char g5 = 0; // 0x201038 char * g6; // 0x201040 int32_t g7 = 0; // 0x400 int32_t g8; // ------------------------ Functions ------------------------- // Address range: 0x788 - 0x79f int64_t _init(void) { int64_t result = 0; // 0x796 if (*(int64_t *)0x200fe8 != 0) { // 0x798 __gmon_start__(); result = &g8; } // 0x79a return result; } // Address range: 0x7b0 - 0x7b6 int32_t function_7b0(char * s1, char * s2, int32_t n) { // 0x7b0 return strncmp(s1, s2, n); } // Address range: 0x7c0 - 0x7c6 int32_t function_7c0(int64_t * ptr, int32_t size, int32_t n, struct _IO_FILE * stream) { // 0x7c0 return fread(ptr, size, n, stream); } // Address range: 0x7d0 - 0x7d6 int32_t function_7d0(struct _IO_FILE * stream) { // 0x7d0 return fclose(stream); } // Address range: 0x7e0 - 0x7e6 void function_7e0(void) { // 0x7e0 __stack_chk_fail(); } // Address range: 0x7f0 - 0x7f6 int32_t function_7f0(char * format, ...) { // 0x7f0 return printf(format); } // Address range: 0x800 - 0x806 char * function_800(char * s, int32_t n, struct _IO_FILE * stream) { // 0x800 return fgets(s, n, stream); } // Address range: 0x810 - 0x816 int32_t function_810(struct _IO_FILE * stream, char * buf, int32_t modes, int32_t n) { // 0x810 return setvbuf(stream, buf, modes, n); } // Address range: 0x820 - 0x826 struct _IO_FILE * function_820(char * filename, char * modes) { // 0x820 return fopen(filename, modes); } // Address range: 0x830 - 0x836 void function_830(char * s) { // 0x830 perror(s); } // Address range: 0x840 - 0x846 void function_840(int32_t status) { // 0x840 exit(status); } // Address range: 0x850 - 0x856 void function_850(int64_t * d) { // 0x850 __cxa_finalize(d); } // Address range: 0x860 - 0x88b int64_t _start(int64_t a1, int64_t a2, int64_t a3, int64_t a4) { // 0x860 int64_t v1; // 0x860 __libc_start_main(2518, (int32_t)a4, (char **)&v1, (void (*)())2816, (void (*)())2928, (void (*)())a3); __asm_hlt(); // UNREACHABLE } // Address range: 0x890 - 0x8c2 int64_t deregister_tm_clones(void) { // 0x890 return (int64_t)&g3; } // Address range: 0x8d0 - 0x912 int64_t register_tm_clones(void) { // 0x8d0 return 0; } // Address range: 0x920 - 0x95a int64_t __do_global_dtors_aux(void) { // 0x920 if (g5 != 0) { // 0x958 int64_t result; // 0x920 return result; } // 0x929 if (*(int64_t *)0x200ff8 != 0) { // 0x937 __cxa_finalize((int64_t *)*(int64_t *)0x201008); } int64_t result2 = deregister_tm_clones(); // 0x943 g5 = 1; return result2; } // Address range: 0x960 - 0x96a int64_t frame_dummy(void) { // 0x960 return register_tm_clones(); } // Address range: 0x96a - 0x9d6 int64_t readflag(void) { struct _IO_FILE * file = fopen("flag", "rb"); // 0x980 if (file != NULL) { // 0x9a6 fread((int64_t *)&g6, (int32_t)&g7, 1, file); fclose(file); return 0; } // 0x990 perror("[-] flag file "); exit(0); // UNREACHABLE } // Address range: 0x9d6 - 0xaf7 int main(int argc, char ** argv) { int64_t v1 = __readfsqword(40); // 0x9e1 setvbuf(g3, NULL, 1, 0); setvbuf(g4, NULL, 1, 0); readflag(); printf("[+] password => %p\n", (int64_t *)"P4s$w0rD"); int64_t str; // bp-1048, 0x9d6 fgets((char *)&str, (int32_t)&g7, g4); printf((char *)&str); if (strncmp("P4s$w0rD", "weakpass", 8) != 0) { // 0xac4 printf("[!] password is %s\n", "P4s$w0rD"); } else { // 0xaaa printf("[+] %s", (char *)&g6); } int64_t result = 0; // 0xaee if (v1 != __readfsqword(40)) { // 0xaf0 __stack_chk_fail(); result = &g8; } // 0xaf5 return result; } // Address range: 0xb00 - 0xb65 int64_t __libc_csu_init(int64_t a1, int64_t a2, int64_t a3) { int64_t result = _init(); // 0xb2c if ((int64_t)&g2 - (int64_t)&g1 >> 3 == 0) { // 0xb56 return result; } int64_t v1 = 0; // 0xb34 while (v1 + 1 != (int64_t)&g2 - (int64_t)&g1 >> 3) { // 0xb40 v1++; } // 0xb56 return result; } // Address range: 0xb70 - 0xb72 int64_t __libc_csu_fini(void) { // 0xb70 int64_t result; // 0xb70 return result; } // Address range: 0xb74 - 0xb7d int64_t _fini(void) { // 0xb74 int64_t result; // 0xb74 return result; } // --------------- Dynamically Linked Functions --------------- // void __cxa_finalize(void * d); // void __gmon_start__(void); // int __libc_start_main(int *(main)(int, char **, char **), int argc, char ** ubp_av, void(* init)(void), void(* fini)(void), void(* rtld_fini)(void), void(* stack_end)); // void __stack_chk_fail(void); // void exit(int status); // int fclose(FILE * stream); // char * fgets(char * restrict s, int n, FILE * restrict stream); // FILE * fopen(const char * restrict filename, const char * restrict modes); // size_t fread(void * restrict ptr, size_t size, size_t n, FILE * restrict stream); // void perror(const char * s); // int printf(const char * restrict format, ...); // int setvbuf(FILE * restrict stream, char * restrict buf, int modes, size_t n); // int strncmp(const char * s1, const char * s2, size_t n); // --------------------- Meta-Information --------------------- // Detected compiler/packer: gcc (7.5.0) // Detected functions: 22
- Old C code – how to upgrade it?
- RetDec – retargetable machine-code decompiler based on LLVM
wabt
-
Fortran on WebAssembly
https://github.com/WebAssembly/wabt/blob/main/wasm2c/README.... is a straightforward way to take an untrusted application (compiled already to wasm) and turn it into C that you can embed into your application or compile to a linkable DLL. I believe this approach has been used to sandbox untrusted libraries in production by Mozilla: https://hacks.mozilla.org/2021/12/webassembly-and-back-again...
-
Show HN: Mutable.ai – Turn your codebase into a Wiki
As long as this is happening, might as well try some of my favorites: https://github.com/wasm3/wasm3, https://github.com/WebAssembly/wabt, https://github.com/bytecodealliance/wasmtime
- Ask HN: Best blog tutorial explaining Assembly code?
-
Understanding Every Byte in a WASM Module
This seems sort of like understanding machine code vs assembly; it's much easier to learn WAT and translate to/from WASM as necessary using the wabt tools [0].
Either way its super cool how simple WebAssembly is, you can really get your hands dirty and understand exactly every detail of how your program runs!
[0] https://github.com/WebAssembly/wabt
-
Show HN: Gogosseract, a Go Lib for CGo-Free Tesseract OCR via Wazero
You mean this? https://github.com/WebAssembly/wabt/blob/main/wasm2c/README....
That seems like quite an undertaking. But at that point, It would make sense to cut out WASM entirely like https://datastation.multiprocess.io/blog/2022-05-12-sqlite-i...
-
WebAssembly: byte-code of the future
The .wat file can be compiled to a .wasm using wat2wasm which is part of the WebAssembly Toolkit CLI tools:
- DeviceScript: TypeScript for Tiny IoT Devices
-
Is anyone working/creating tools for wasm in C?
it is in C++ https://github.com/WebAssembly/wabt/blob/main/src/tools/wat2wasm.cc
-
How to hide script file?
I don't think you are building an application that will use Native Client technologies How to extract source code from Native Client .nexe file, migrate to WebAssembly? #1864 so that would be superfluous, and frankly, useless in your case.
-
Hey Rustaceans! Got a question? Ask here (5/2023)!
I'm trying to get a basic Rust webassembly program, then porting it to C via wasm2c. The example works, but when I use wasm-bindgen and analyze it with wasm2wat, I get an import "env". The issue is that in C (wasm2c) it comes out as struct Z_env_instance_t; and I can't instantiate it (as in Z_env_instance_t env; to pass it's address to Z_wasm_client_bg_instantiate.
What are some alternatives?
copycat - A concatenative language on Scheme
wasmr - Execute WebAssembly from R using wasmer
stoical - An ancient forth like language
langs
unwebpack-sourcemap - Extract uncompiled, uncompressed SPA code from Webpack source maps.
binaryen - Optimizer and compiler/toolchain library for WebAssembly
stoical-mentoring
perspective - A data visualization and analytics component, especially well-suited for large and/or streaming datasets.
mstoical - MStoical - a Forth like language, but better
wasmtime - A fast and secure runtime for WebAssembly
oscp - Designed for automated enumeration for ethical hacking and penetration testing
benchmarks - Some benchmarks of different languages