Skip to content

Commit

Permalink
Merge pull request #69 from brandonros/main
Browse files Browse the repository at this point in the history
stuck on gs 58
  • Loading branch information
sha0coder authored Jan 15, 2025
2 parents 3bb3a48 + 7c29738 commit c56ba04
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 3 deletions.
2 changes: 1 addition & 1 deletion libmwemu/src/elf32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ impl Elf32 {
}

pub fn is_elf32(filename: &str) -> bool {
//log::info!("checking if elf32: {}", filename);
log::info!("checking if elf32: {}", filename);
let mut fd = File::open(filename).expect("file not found");
let mut raw = vec![0u8; 5];
fd.read_exact(&mut raw).expect("couldnt read the file");
Expand Down
11 changes: 10 additions & 1 deletion libmwemu/src/emu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2304,8 +2304,17 @@ impl Emu {
teb_struct.thread_id as u64
}
}
0x58 => {
// TEB.ThreadLocalStoragePointer
let teb = self.maps.get_mem("teb");
if self.cfg.verbose >= 1 {
log::info!("{} Reading ThreadLocalStoragePointer from TEB 0x{:x}", self.pos, teb.get_base());
}
// You might want to set up proper TLS array
teb.get_base() + 0x1500 // Example offset for TLS array
}
_ => {
log::info!("unimplemented gs:[{}]", mem_addr);
log::info!("unimplemented gs:[0x{:x}]", mem_addr);
return None;
}
};
Expand Down
42 changes: 42 additions & 0 deletions libmwemu/src/winapi64/kernel32.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@ pub fn gateway(addr: u64, emu: &mut emu::Emu) -> String {
"FreeResource" => FreeResource(emu),
"IsBadReadPtr" => IsBadReadPtr(emu),
"GetEnvironmentStringsW" => GetEnvironmentStringsW(emu),
"AddVectoredExceptionHandler" => AddVectoredExceptionHandler(emu),
"SetThreadStackGuarantee" => SetThreadStackGuarantee(emu),
"GetCurrentThread" => GetCurrentThread(emu),
_ => {
if emu.cfg.skip_unimplemented == false {
if emu.cfg.dump_on_exit && emu.cfg.dump_filename.is_some() {
Expand Down Expand Up @@ -3771,3 +3774,42 @@ fn IsBadReadPtr(emu: &mut emu::Emu) {
// TODO: implement this
emu.regs.rax = 0;
}

fn AddVectoredExceptionHandler(emu: &mut emu::Emu) {
let p1 = emu.regs.rcx as usize;
let fptr = emu.regs.rdx as usize;

log::info!(
"{}** {} kernel32!AddVectoredExceptionHandler {} callback: 0x{:x} {}",
emu.colors.light_red,
emu.pos,
p1,
fptr,
emu.colors.nc
);

emu.veh = fptr as u64;

emu.regs.rax = 0x2c2878;
}

/*
BOOL SetThreadStackGuarantee(
[in, out] PULONG StackSizeInBytes
);
*/
fn SetThreadStackGuarantee(emu: &mut emu::Emu) {
let stack_size_in_bytes = emu.regs.rcx as usize;
log_red!(emu, "** {} kernel32!SetThreadStackGuarantee {:x}", emu.pos, stack_size_in_bytes);
// TODO: implement this
emu.regs.rax = 1;
}

/*
HANDLE GetCurrentThread();
*/
fn GetCurrentThread(emu: &mut emu::Emu) {
log_red!(emu, "** {} kernel32!GetCurrentThread", emu.pos);
// TODO: implement this
emu.regs.rax = 0xFFFF_FFFF_FFFF_FFFE;
}
2 changes: 1 addition & 1 deletion scripts/enigma-protector.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ if [ "$MODE" == "dump" ]; then
--release \
--target $TARGET \
-- \
--filename ~/Desktop/enigma/surprise-loader.exe \
--filename ~/Desktop/enigma/pe_loader.exe \
--trace /tmp/output.csv \
--maps ./maps64/ \
--64bits
Expand Down

0 comments on commit c56ba04

Please sign in to comment.