Leaderboard
-
CodeExplorer
Team Member124Points4,545Posts -
lovejoy226
Full Member+38Points1,436Posts -
Stingered
Full Member19Points114Posts -
X0rby
Full Member17Points344Posts
Popular Content
Showing content with the highest reputation since 01/08/2026 in Posts
-
Prometheus (12 Layers of Insanity)
7 pointshttps://dr4gan0x.github.io/dr4gan-portfolio/?post=prometheus-12-layers I hope this write up catches your interest7 points -
Compiling Unlicense
5 pointsThis is a very bad thing to add! Grabbing this personal information from a user without mentioning that is a terrible act to do !! Now you have ip @ of @CodeExplorer did you ask him if he agreed to that or not?? No! So that's why everyone must run any garbage from the internet on an isolated machine!5 points -
Prometheus (12 Layers of Insanity)
4 pointsThrew this into Binary Ninja, turned out to be Rust-compiled ELF64 PIE not C as DiE claims, debug strings like src/main.rs src/vm/dispatcher.rs src/crypto/sbox.rs give it away, main at 0x41bea0 is just the lang_start trampoline real logic sits in sub_41a0c0 which drops into the verification orchestrator sub_418a10 running all 12 layers with bitwise AND accumulation no early exits, layers 1-3 are RDTSC delta and clock_gettime CLOCK_MONOTONIC anti-debug gates, 4-5-6 enforce the 28-char [A-Z0-9_] format with underscores pinned at positions 10/15/23 last 4 digits only and ASCII sum exactly 1901, identified the core hash at sub_433b80 as SipHash-2-4 from the init vectors 0x736f6d6570736575 0x646f72616e646f6d 0x6c7967656e657261 0x7465646279746573 aka "somepseudorandomlygeneratedbytes" with rotation constants 13/32/16/21/17/32 two rounds per block four at finalization, the actual crack comes from Layer 10 which splits the key into four 7-byte segments each hashed with independent k0/k1 pairs reducing the search space from 36^24 down to 4x36^6 roughly 2^33 which is the single architectural weakness in the design, brute-forced the last 4 digits first against Layer 6s YEARHASH/KEY01020 keys in 10K iterations got 2026 then segment 4 in 1.3K then segments 2 and 3 each in ~2.2B iterations then segment 1 with sum-constraint pruning total 55 seconds single core, validated against all remaining layers including the full-key SipHash triplet layers 7/8/9 with three different key pairs and the polynomial evaluation through MurmurHash3 fmix64 at five prime evaluation points all passed clean, key is PR0M3TH3U5_F1R3_ST34L3R_2026, I have a full writeup sitting around too lazy to format it properly but if anyone wants I can publish it4 points -
Themida & VMProtect (Same Virtualized Code Sections)
(1) I never accused you of lying (2) I don't care about your "tools" My point is crystal clear: this site will continue to die if we allow such "solutions" (which are 9/10 just people using public tooling and therefore can't provide any novel contributions). Go ahead, feel free to discuss the "internals", which was arguably the bare minimum you should have provided in the original response to this challenge.4 points
-
Themida & VMProtect (Same Virtualized Code Sections)
Wow, very helpful 🙄 Every "solution" on this site is the most Cleo like response ever. I swear in almost every challenge, someone throws the .exe into public tooling, uploads the output, and provides zero explanation -- likely with the hope that people view them in awe. In my opinion, such solutions should result in consequences for the poster. This site will continue to die if people continue with these dull answers. For those interested in tackling such protection schemes, I would recommend: (1) https://github.com/NaC-L/Mergen (2) https://github.com/Colton1skees/Dna (3) https://whereisr0da.github.io/blog/posts/2021-02-16-vmp-3 (4) https://secret.club/2021/09/08/vmprotect-llvm-lifting-1.html4 points
-
Themida v3.1.4 (x32 & x64) - Impossible
This one is an interesting sample. Code is really small, so it was stolen completely, thus it's hard to tell app code from protector code. Functional code is quite simple, just MessageBoxA. And that's it, it does nothing more. After showing the message box it starts freeing memory that definitely isn't app code. But for the sake of completeness let's get to the bottom of this. We have 8 more code bytes. And we have 1 reloc pointing there, meaning ExitProcess should perfectly fit in. Unpacked file attached with code, import and relocs restored and sections cut. unpacked.exe3 points
-
Compiling Unlicense
3 pointsIf you don’t care about “random forum users”, then don’t publish things publicly. You posted it here on purpose, so a public post means public criticism. You don’t get to choose who is allowed to comment... The website example is bullshit. A website logging IPs during an HTTP request is not the same as an executable secretly making outbound connections. The protocol forces one; the other is a decision you coded yourself. Acting like they’re the same is dishonest. Running a program does not mean permission for hidden network activity.3 points -
trying to create a keygen for csharp program
issue resolved by adding private readonly DataEncryption _encrypt = new DataEncryption();2 points
-
Compiling Unlicense
2 points
-
Obsidium v1.6.9
2 pointsInteresting 🌝 this is reminded me to the old days, is it possible to create a tutorial video I don't see good unpacking tutorials theses days2 points -
Themida v3.1.4 (x32 & x64) - Impossible
Themida v3.1.4 (x32 & x64) - Impossible Two files are protected with an old version Themida (3.1.4) Entry Point is virtualized Just find and restore OEP, recover the IAT and unpack if it possible Virustotal detects it as a virus, but my AV software is not File Information Submitter fReestYler Submitted 05/10/2025 Category UnPackMe View File2 points -
Compiling Unlicense
2 pointsThat’s a weak excuse. “Reverse engineering forum” is not a reason to steal personal data. Running unknown binaries in a VM is indeed a good practice, not a license for you to silently collect IPs or any identifying info without disclosure. The problem isn’t whether it’s legal, it’s that you did not inform the user, If your app contacts a license server and logs IPs that must be stated explicitly ! Saying “it only collects minimal data” after the fact doesn’t change anything. Consent is obtained before, not justified after and “statistics” doesn’t magically make undisclosed data collection acceptable. Reverse engineering is about analyzing protections and behavior not normalizing shady practices and then hiding behind assumptions.2 points -
Revteam Reverse Engineering Collection
2 points -
Themida & VMProtect (Same Virtualized Code Sections)
Like I said, only my own tools were used and they have no external public code. I'm not expecting anything, I just posted the result. The only thing I hope is that I get corrected, if I'm wrong. If you have proof I used public tools and lied-you're free to show them. I can answer some questions about internals, if you're interested. But if you expect me to open source a couple of years work just because some random guy from the Internet suspected and accused me of something, not gonna happen, sorry.1 point
-
Themida & VMProtect (Same Virtualized Code Sections)
It's hard to describe it in a single post. It's a generic deobfuscator, not VMProtect-only, based on classic optimization techniques, nothing fancy like AI or patterns. Written completely from scratch, nothing LLVM-based or something. It's still a work in-progress, but getting into stable beta-stage, so I decided to give it additional testing. Devirt should be correct, at least I tested the exe with this code and it works. The one thing I can mess a little is an intermediate representation->asm translation since it's done partially manually.1 point
-
Themida & VMProtect (Same Virtualized Code Sections)
Great work if correct!! But you should aim to share knowledge on this site for it isn't very fruitful to pointlessly upload an answer like this.1 point
-
Themida & VMProtect (Same Virtualized Code Sections)
Didn't see it as solved, so decided to give it a try. VMProtect version is quite easy, devirted code: 00B91EEE 837D EC 0F CMP DWORD PTR SS:[EBP-14],0F 00B91EF2 76 05 JBE SHORT hashgen_.00B91EF9 00B91EF4 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28] 00B91EF7 EB 03 JMP SHORT hashgen_.00B91EFC 00B91EF9 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28] 00B91EFC 6A 03 PUSH 3 00B91EFE 50 PUSH EAX 00B91EFF 8D8D 9CFCFFFF LEA ECX,DWORD PTR SS:[EBP-364] 00B91F05 51 PUSH ECX 00B91F06 8D8D 98FCFFFF LEA ECX,DWORD PTR SS:[EBP-368] 00B91F0C 8F01 POP DWORD PTR DS:[ECX] 00B91F0E E8 DD170000 CALL hashgen_.00B936F0 00B91F13 8D85 90FCFFFF LEA EAX,DWORD PTR SS:[EBP-370] 00B91F19 50 PUSH EAX 00B91F1A C645 FC 17 MOV BYTE PTR SS:[EBP-4],17 00B91F1E 68 ED030000 PUSH 3ED 00B91F23 8B8D 94FCFFFF MOV ECX,DWORD PTR SS:[EBP-36C] 00B91F29 8BF9 MOV EDI,ECX 00B91F2B FF15 A892B900 CALL DWORD PTR DS:[<&mfc140u.#5427>] ; mfc140u.5E0C82B0 00B91F31 90 NOP 00B91F32 90 NOP 00B91F33 90 NOP 00B91F34 90 NOP 00B91F35 90 NOP 00B91F36 90 NOP 00B91F37 90 NOP 00B91F38 90 NOP 00B91F39 90 NOP 00B91F3A 90 NOP 00B91F3B 90 NOP 00B91F3C 90 NOP 00B91F3D 90 NOP 00B91F3E 90 NOPAnd a code for a name 123456 is e10adc3949ba59abbe56e057f20f883e1 point
-
Looking for a reverse engineer, better if already in the automotive field.
We are seeking a skilled reverse engineer for a long-term collaboration with a monthly payment structure. What We're looking for: • Proficiency in C/C++, Delphi, and assembly language • Extensive experience with well-known protectors like VMProtect, Themida, and others • Strong ability to analyze and bypass obfuscation techniques • Determination in problem-solving and the ability to work under pressure Our projects focus on the automotive sector, with a strong emphasis on improving software and firmware. Since we also develop hardware devices, our reverse engineering efforts are solely aimed at gaining a deeper understanding of the underlying systems. Payment is preferred on monthly basis, but per project is also doable. Contact me on telegram: https://t.me/TobeMTV , to get more info about the job.1 point
-
Coding Version.dll in Delphi To Patch EXE
Hi! can someone help in coding version.dll in delphi to patch exe file ,there is an patcher called PYG_DLL_Patcher which exports version.dll and some other dlls but it has viruses when i enable the antivirus it deletes that version.dll file exported by PYG_DLL_Patcher, i found a version.dll delphi code here but the patch code is not included in it. Thanks in advance!1 point -
Looking for a reverse engineer, better if already in the automotive field.
"automotive" + "VMProtect, Themida" I've been dumping and reverse engineering ECM and BCM firmware since about 2002 and never seen obfuscation. If you need someone to RE challenge/response I probably already have the IDA database and python emulator..1 point
-
TX-02 Berkeley Mono Fontface
1 pointThanks dude, really appreciate the font but can you tell me where can i get more of these fonts this one doesn't contain the extra light and extra light oblique.1 point
-
Compiling Unlicense
1 pointExcuse? I wasn't even going to make excuses, especially to random forum users. I'm not interested in the opinions of random people. It's just amusing how you try to make a problem out of nothing. Every website stores the IP addresses of users who visit it in its access logs without even informing the user about it. Even this forum ;)1 point -
Compiling Unlicense
1 pointThis forum is devoted to reverse engineering. This implies by default that all unknown executable files should be run in a virtual environment. Moreover, I clearly positioned the provided sample as an object for researching non-standard Themida settings and in no way encouraged its launch on the host machine. In any case, the application does not do anything illegal, and the license server stores the minimum necessary information, which under no circumstances is transferred to third parties and is not used for anything other than collecting statistics on the use of the application.1 point -
Go Figure!!!
1 pointTutorial (Short version): The kgm does the following: 1) Looks for the file "duh!!.syk" in the same directory (folder), if not found, it loads showing one field only (badboy), else: 2) Reads the text line inside the file "duh!!.syk" & by using a simple (xor 0x40) with each character, result should read "TestingOurSync???", else (badboy) 3) Loads the full form showing both text fields (i.e: name & serial) & a check button. Now try: name: Chilling serial: o!h.$kLB[2E{(,YV;+X/]thj}H.(uCFT~1Wx2iWM;4T*)Y$S"1B.$wcS@J Click the check button & the kgm will: 4) Trims both strings, Base91 decodes the serial into: "26734308-=`~<-YAGAIV-2090603021-2C51325133CEA38" Checks to see if it has 5 parts (separated by "-"), else (badboy). More checks follow. 5) part1 must be 8 characters from "0123456789" 6) part2 must be 4 characters from "$+<=>|~" 7) part3 must be 6 characters from "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 8) Build & check part4: a) Uppercase the constant "If I Only Knew" & add a null byte at start then SDBM Hash (Ozan Yigit) it (in reverse order): 0x57454E4B20594C4E4F204920464900 = 0x7D0BFCAF b) math: 0x7D0BFCAF xor 0x46 (a constant) = 0x7D0BFCE9 c) math: 0x7D0BFCE9 xor StrToInt(p1) 0x0197EEE4 = 0x7C9C120D d) IntToStr(0x7C9C120D) = "2090603021" <> p4 = "2090603021" 9) Check if trimmed name is 4 or more characters (kind of late), else bb 10) Let s1 be the result of joining: name + ' ' (space) + constant "Jalolo" ... "Chilling Jalolo" 11) Let s2 be the result of joining: s1 + constant "WhoamI?" ... "Chilling JaloloWhoamI?" 12) Generate a seed by applying same SDBM Hash method on s2 (uppercase, add a null byte at start, ...) to get: 0x3F494D414F48574F4C4F4C414A20474E494C4C49484300 = 0x0BE39B81 ... seed 13) Build & check part5: Using xxHash64 (Yann Collet), perform xxHash64(WideString(s1), Integer(seed)) = "2C51325133CEA38" <> to p5 If all goes well then (goodboy). Let me know if I've missed anything :) Other combinations: name: XorRanger's Go Figure Fixed!!! serial: Rz;aAkGuG3Xtlk>V;+/zV0Tj|H.(~*AShw`EwnLdR2<:9[ZXjDhb|v1X;Lc name: Happy New Year! serial: E2wbCkcMh2E{(v$M)L!cgvY0|HS*SCBSn!IbLm?R$J+BD+gSzwIzml&M7Ia kg.7z1 point
-
VMPLicenseProtector
1 pointVMPLicenseProtector This is a recently developed recreational utility. I'm unsure which forum section is appropriate, so moderators please feel free to move it if necessary. The tool implements a combined The Enigma and VMProtect protection scheme and is designed for applying VMProtect to Win32/Win64 executables and DLLs without requiring source code. It is not compatible with .NET assemblies. The interface supports Chinese/English language switching. To function, VMProtect_Con.exe must be placed in the tool's directory. Note that the tool itself is incompatible with Windows 7 and requires the DirectX 11 runtime to be installed. Software protected with it remains compatible with Windows XP/7/10. Trial Version Limitations: Only the anti-hijacking feature is enabled. All other functions are disabled. Uses a fixed RSA key. Please do not use it to protect commercial software. While some features are disabled, the tool may be sufficient for users with modest needs if patched. The trial license expires after one month, but functionality can be extended through patching. Archive Password: View by double-clicking the RAR file in WinRAR (check archive comment) or use: tuts4you. File Information Submitter lengyue Submitted 12/26/2025 Category CrackMe View File1 point
-
VMPLicenseProtector
1 pointThe software performs network time verification by connecting to the internet. It retrieves the time from www.baidu.com and contains no malicious code. Please rest assured. I have no interest in embedding Trojan viruses or backdoors in the software.1 point
-
Please help to reverce an ASM function.
1 point
-
Please help to reverce an ASM function.
1 point -
Please help to reverce an ASM function.
X0rby what ai engine used to get this code? Haven't tried your code yet will try it asap. Looks very clean and simple. Fixed my code from Hex-ray and this is the decompiled working ok code: Obfuscate_Data(uint8_t* input, uint8_t* output) { int v2; uint8_t buffer[12]; uint8_t* output_1; int v5; int i; uint8_t v7; uint8_t v8; uint8_t v9; uint8_t n117_1; int n12; uint8_t* v12; uint8_t v13; uint32_t internal_state; uint8_t state; uint8_t table_var; uint32_t table[11]; buffer[0] = input[1]; HIBYTE(table[4]) = *input; buffer[4] = input[2]; BYTE2(table[3]) = buffer[0]; buffer[0] = input[3]; BYTE1(table[5]) = buffer[4]; buffer[4] = input[4]; BYTE1(table[4]) = buffer[0]; buffer[0] = input[5]; HIBYTE(table[3]) = buffer[4]; buffer[4] = input[6]; LOBYTE(table[5]) = buffer[0]; buffer[0] = input[7]; LOBYTE(table[3]) = buffer[4]; buffer[4] = input[8]; BYTE2(table[4]) = buffer[0]; buffer[0] = input[9]; output_1 = output; LOBYTE(table[4]) = buffer[4]; BYTE1(table[3]) = buffer[0]; table[0] = 0x6F6D6564; table[1] = 0x4F4D4544; table[2] = 0x45444F4D; table_var = 0xEA; internal_state = 0; v2 = 0; for (i = 0; i < 10; ++i) { v7 = *((_BYTE*)&table[3] + i); v8 = v7 * (i + 1); LOBYTE(internal_state) = v8 + internal_state; v9 = BYTE1(internal_state) - v8; BYTE2(internal_state) += v7 * (i + 56); BYTE1(internal_state) -= v8; } n117_1 = table_var; BYTE2(table[5]) = LOBYTE(table[3]) * internal_state; HIBYTE(table[5]) = (LOBYTE(table[3]) * internal_state) ^ v9; state = (BYTE2(internal_state) ^ (HIBYTE(table[5]) + 1)) & 3; n12 = 0; while (1) { v12 = &output_1[n12]; v13 = 5 * n12++ + (n117_1 ^ *((_BYTE*)&table[3] + v12[(char*)table - (char*)output])); *v12 = v13; n117_1 = v13 + 34; if (n12 >= 12) break; output_1 = output; } output[12] = state | (4 * v2) & 0xC; return 1; }But i need function that reverses the output of the function. I mean to get the input if i have the output buffer already. PS. Tried X0rby code but no luck it didn't give good result. Only the first byte is encoded ok with this function.1 point
-
Please help to reverce an ASM function.
#include <stdint.h> #include <string.h> #include <stdio.h> #ifndef _WIN32 #define __stdcall #endif int __stdcall ted(uint8_t* input_buf, uint8_t* output_buf, uint8_t arg_8) { uint8_t permuted_input[10]; permuted_input[0] = input_buf[6]; // var_10 permuted_input[1] = input_buf[9]; // var_F permuted_input[2] = input_buf[1]; // var_E permuted_input[3] = input_buf[4]; // var_D permuted_input[4] = input_buf[8]; // var_C permuted_input[5] = input_buf[3]; // var_B permuted_input[6] = input_buf[7]; // var_A permuted_input[7] = input_buf[0]; // var_9 permuted_input[8] = input_buf[5]; // var_8 permuted_input[9] = input_buf[2]; // var_7 uint8_t var_24[4] = {0, 0, 0, 0}; uint8_t key_string[] = { 0x6F, 0x6D, 0x65, 0x64, 0x4F, 0x4D, 0x45, 0x44, 0x45, 0x44, 0x4F, 0x4D }; uint8_t var_1D = 0xEA; for (int i = 0; i < 10; i++) { uint8_t val = permuted_input[i]; uint16_t product1 = (i + 1) * val; uint8_t p1_low = (uint8_t)product1; var_24[0] += p1_low; var_24[1] -= p1_low; uint16_t product2 = (i + 0x38) * val; var_24[2] += (uint8_t)product2; } uint8_t al = var_24[0] * permuted_input[0]; uint8_t bl = var_24[1] ^ al; var_24[2] = ((bl + 1) ^ var_24[2]) & 3; uint8_t current_dl = var_1D; for (int i = 0; i < 12; i++) { uint8_t key_char = key_string[i]; - // The original assembly does: mov al, [ebp + key_char + var_10] // This reads outside the 'permuted_input' array. uint8_t magic_byte = *( (&permuted_input[0]) + key_char ); uint8_t calculated = magic_byte ^ current_dl; uint8_t add_val = (uint8_t)(i * 5); calculated += add_val; output_buf[i] = calculated; current_dl = calculated + 0x22; } uint8_t final_byte = ((arg_8 * 4) & 0x0C) | var_24[2]; output_buf[12] = final_byte; return 1; } int main() { uint8_t input[] = {0,1,2,3,4,5,6,7,8,9}; uint8_t output[13]; ted(input, output, 0x10); return 0; }1 point -
Please help to reverce an ASM function.
1 point
-
Please help to reverce an ASM function.
Try AI, grok will give you a much better code but you will need several iterations till it gets a working one1 point
-
create backup(from olly) functionality in x64dbg
My previous video link is dead. Here below you can watch how to use my plugin.1 point
-
Which .NET protector is really the hardest?
All protectors can be unpacked, that doesn't means dnguard isn't good.1 point -
HPE Gen10 SmartMemory Authentication Bypass: Need help identifying the secondary Digital Signature
1 pointTo avoid blind guessing, I suggest you to get old iLO firmware packages and analyze them. See what conditions must be fulfilled in order to get the "SmartMemory" status. If my google-fu is working, Gen10 servers use iLO5, here is it's general spec: https://www.hpe.com/us/en/collaterals/collateral.c04154343.html, and here are the download links https://support.hpe.com/connect/s/softwaredetails?language=en_US&collectionId=MTX-2dc80c4ae4b943fa. It would appear that older firmware packages didn't use any encryption, just some (trivial) compression, making the job so much easier.1 point -
Compiling Unlicense
1 pointNo, the above script won't work due to Themida anti-debug tricks, even if program starts with the debugger. I got to say: Themida is great protector. Too bad about antivirus detections like https://www.malwarebytes.com/blog/detections/riskware-patcher-themida I made some new updates to Unlicense: - fixed winlicense v3 detection for the above https://storage.custos.dev/ResourceCryptor_latest.7z - fixed imports for winlicense v3 x64 OEP still needs to be fixed as currently stops before real OEP; You could try --force_oep: --force_oep=0x0115E 0x0115E = OEP rva; as long as you know OEP rva. unlicenseFixed2.rar1 point -
kill a process and prevent it from being created again
Below are some core code snippets. // process monitoring callback function // disable the creation of specified processes VOID ProcessNotifyExRoutine_call_back( PEPROCESS pEProcess, HANDLE hProcessId, PPS_CREATE_NOTIFY_INFO CreateInfo) { if (NULL == CreateInfo) { return; } PCHAR pszImageFileName = PsGetProcessImageFileName(pEProcess); if (0 == _stricmp(pszImageFileName, "avpui.exe")) // target process name { CreateInfo->CreationStatus = STATUS_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY; } }NTSTATUS ZwKillProcess(HANDLE pid)//Kill the process { HANDLE hProcess = NULL; CLIENT_ID ClientId; OBJECT_ATTRIBUTES oa; NTSTATUS status; ClientId.UniqueProcess = pid; ClientId.UniqueThread = 0; oa.Length = sizeof(oa); oa.RootDirectory = 0; oa.ObjectName = 0; oa.Attributes = 0; oa.SecurityDescriptor = 0; oa.SecurityQualityOfService = 0; status = ZwOpenProcess(&hProcess, 1, &oa, &ClientId); if (NT_SUCCESS(status)) { ZwTerminateProcess(hProcess, 0); ZwClose(hProcess); return status; }; return FALSE; }bin.zip e.g. video_2025-09-13_120702.mp41 point -
Revteam Reverse Engineering Collection
My server is working, i just migrated to docker. (Its WebDav , https) https://eddynet.cz:9865 File list is in attached files. content_250414.7z1 point -
WinLicense v3.1.3.0 x86 (All Protection Options)
I admit it, I'm just showing off, you can show off if you have the ability. Unfortunately, apart from jealousy, you are useless. You only fantasize about getting someone else's knowledge without any effort. Anyone with some level of proficiency will think and search for clues based on the documents I provide. Only someone like you who only wants to get something for nothing would make these unreasonable demands? Everyone knows who the joke is. You can you up, No can no BB1 point
-
WinLicense v3.1.3.0 x86 (All Protection Options)
😁 I'm not asking you to share your src or tuts/offer a solution. But your reply in my topic are these useful? No - absolutely not. Only one sentence, one picture, and one RAR package. Even more unfortunately, some files in your RAR package are deliberately VM some code snippets. What can the downloaders learn from your RAR package? Besides the analysis reply I provided, which downloader provided an effective analysis reply? In this topic, you're just trying to get attention by showing-off that you can do this with some deliberately modified files that don't have any useful information. We're here to learn and share knowledge. If you don't want to share, that's fine. No need to brag, but if you do, I don't mind. In addition, this topic would like to give special thanks to @TRISTAN Pro for selflessly sharing his tutorials and knowledge.1 point -
VMProtect v3.8.1 Ultra (Mutation + Virtualization)
Please record the process and post it, so we can get benefit from you. Regards. sean.1 point -
Flare-On 7
1 pointAfter spending three days i m still stuck at 4th challenge now i understand what it mean to be a reverse engineer. May be i will not solve all(or may be even the half of them) the challenge but i still try my best till the last day.1 point
-
Flare-On 7
1 point@Rurik: why the kdnet requirement? Why 2 virtual machines? I'm no kernel debugging wizard by any means, but here's a primitive setup that serves me well. WinDbg runs on my main machine, connects to VMWare guest machine via a named pipe. Pretty much everything was taken from this guide: https://www.triplefault.io/2017/07/setting-up-kernel-debugging-using.html 1) Windbg - I have a BAT file with the command-line. It's used only for kernel debugging: windbg -k com:pipe,port=\\.\pipe\com_1,resets=0,reconnect 2) VMWare guest is set up to have virtual com port that uses named pipe: 3) When necessary, I enable kernel debugging in VMWare guest using bcdedit commands from elevated command prompt: bcdedit /debug on bcdedit /dbgsettings serial debugport:1 baudrate:115200 4) Reboot the guest machine, it will freeze for ~30 seconds waiting for WinDbg to attach. 5) Run WinDbg from .BAT file, done. If you insist on running WinDbg in the other VM, you can still link 2 machines via virtual com port and named pipes. I just quickly tried, something like this: 1) set up VMWare with kernel debugging enabled just like before. 2) set up VMWare with Windbg to use com port like this: Notice "this end is the client" setting 3) Start VMWare with WinDbg, run WinDbg like this: windbg -k com:port=COM1,baud=115200 4) (re-)start VMWare with kernel debugging enabled, WinDbg should automagically attach.1 point -
[DevirtualizeMe] Themida 2.4.6.0
1 pointI do not release the decoder but the code optimizer (not immediately), this is not specific to the oream vm, it is only far more effective than others. What do you say about angr or miasm or optimice or codedoctor ?? do we eliminate them all the tools for binary code analysis ?? I do not issue the decoder code because my hobby is a hobby and I do not want to give anybody a damn but reversing is sharing (I unfortunately belong to the old old reverser school). If I spoke good English I would probably share a lot more info and would not like others who just write for self-celebration. Do you know Scherzo or Softworm ?? I'm an old man who now deals with reversing and my only good luck is that the day they will all program in python or javascript I will not be there anymore..hahahahaha1 point
-
[DevirtualizeMe] Themida 2.4.6.0
1 pointHi, I'm beginning not to ask for the program because I will not make it public, I do not want to harm anybody. Instead I will release the source code of the deobfuscator as soon as I have time to fix some points. @miraculix The deobfuser completely rebuilds the CFG (remove fake Jcc, Opaque Predicates etc .. etc ..) apply PeepHole (pattern recognition) remove DeadCode and Constant Folding and call analyzer and more. Thanks to the suggestions of @fvrmatteo I could try different peepHole solutions than the pattern recognition but the result was never as efficient as the use of pattern recognition so I use this solution at the moment (I reverse, not a conference at MIT code needs to work well .. hahahaha). I only use Pascal. As a disassembler engine use Capstone and as Emulator (for small portions of code) use Unicorn Engine.Not use Virtual Machines Symbolic Execution Phyton script etc .. etc .. Place a small video to give an idea. deob.rar1 point
-
VMProtect vs Themida
1 pointFirst you say Themida is trashtier, then you pick a far inferior packer and state that it is better..? People need to start realizing, that if you have no clue what you're talking about, you should either start your sentence with "I assume" or you shouldn't say anything at all. Silence is bliss. VMProtect is actually rather bad, as the virtual machine in VMProtect is really easy to crack. If you have to choose between Themida and VMProtect, you should always pick Themida. Why? Because Themidas virtual machines are much more advanced and much harder to crack than VMProtect. Themida was initially known for their CISC VM which was (at the time) very strong. It has since been defeated (by Deathway) and is now considered weak (since it's actually rather simple once you start to understand it). VMProtect's virtual machine is almost an exact replica of the Themida CISC VM featuring stronger obfuscation, and as such it works in the exact same way, which makes it (almost) equally weak. Since then, Themida developed the RISC machine (RISC64 and RISC128), which was against defeated by Deathway. They then proceeded to develop the FISH and TIGER machines, which features very new tricks such as complex combined handlers (FISH) doing multiple operations each instead of a handler for each operation like CISC had, and also internal (yet simple) cryptography. The TIGER VM is very similar to the FISH VM (since it is built on the same engine), but doesn't utilize the cryptographic internal registers, etc. Themida also features hybrid virtual machines, such as SHARK, which is FISH virtualized by TIGER, or PUMA, which is TIGER virtualized by FISH. The newest machine(s) from Themida is the DOLPHIN machine, which is yet another layer of complexity upon the newer FISH/TIGER engine, while also supplying a hybrid VM called EAGLE, which is FISH virtualized by DOLPHIN (if memory serves right). If you want to compare the complexity of the newer Themida VMs (e.g. EAGLE) vs. VMProtect's VM, you're probably looking at a complexity scale saying 15:1 or something like that. TL;DR Don't listen to the guys above, as they are completely clueless on the topic. Pick Themida if you have to choose between the two of them.1 point -
[DevirtualizeMe] Themida 2.4.6.0
1 pointHaven't touched this project for a long time. So I worked this weekend on updating the script and catching up with all the changes that they did in the last 1-2 years. Everything works right now except for TIGER. They added a new weird "push" handler, which is very different from any other TIGER handler. (the offset for the push isn't from a parameter, but from a call to another function that return an internal state value, usually that internal state value is used with a parameter to get the wanted real value, but this time it is used just with a constant number... in your binary for example one such handler is at 0x0562AC9). Nothing too bad, but I ran out of time for this weekend. I will do it during this week and update this comment with the devirtualized tiger when it is done. Except for that most of the changes were small. Some of them are fixing bugged handlers, other are adding some small protection templates to the handlers. One change that they did was not reseting the state when re-entering the vm after external instruction execution. (instructions that they don't virtualize). Another change was changing the start of the vm. Until now the start of the vm was something like that: (They push all the registers to the stack before they enter the vm) pop VM_REG_1 pop VM_REG_2 pop VM_REG_3 .. They changed it to: (in a random order) mov VM_REG_1, [esp] mov VM_REG_2, [esp+4] mov VM_REG_3, [esp+8] ... add esp, ... Another change is obfuscating the ending of some of the FISH and TIGER handlers. The FISH(32/64) BLACK is probably the most annoying vm. since the handlers are heavily obfuscated, with fake conditional jumps and all of that shit. One big handler can be 100000+ instructions. So even a small bug when handling it can fornication up everything. It is probably the safest vm because of that but also really really slow. oh, and in 64-bit my compiled devirtualized code isn't the same size as the original code, I am not sure why is that, which of the compiled opcodes take more space than the original . But I still had enough space for the devirtualized code in the original address because of the surrounding macros. devirtualizeme_tmd_2.4.6.0_fish32.devirtualize.clean.exe.7z devirtualizeme_tmd_2.4.6.0_fish64.devirtualize.clean.exe.7z1 point
-
Driver Rootkit Analysis
1 pointChances are that first packet, because your on a TCP/IP network is a broadcast for the MAC address if its not already been found and cached? But you should be able to confirm this by pinging the device and sniffing the packets... Ted.1 point -
[Delphi] Add Imports problem
1 pointWell, you found the line where it crashes but the problem is much deeper. It's caused by pointers and memory reallocation. Something like this: Line 117: if FileToBytes(szFilePath, bFile) then // allocates a memory for TByteArray Line 134: IID := @bFile[dwIATPos]; // IID is a pointer into current TByteArray Line 145: SetLength(bFile, Length(bFile) + dwSize); // resizes TByteArray, memory is not reallocated yet Line 148: CopyMemory(@bFile[dwPos], @Imports.szLibName[1], Length(Imports.szLibName)); // first write into resized array, Delphi memory manager reallocates memory. IID is a pointer into garbage now. Line 149: IID.Name := OffsetToRVA(dwPos, ISH.VirtualAddress, ISH.PointerToRawData); // crash! Your code is quite a mess, so it's hard to give a suggestion how to fix it properly. I'd try avoid using pointers into bFile at all costs. Cheers, kao.1 point