## 핵심 답변
**또 다른 JavaScript 함수 오류가 있습니다!** `Memory.writeU8().add()` 체인이나 다른 함수 호출에 문제가 있습니다. 가장 기본적인 형태로 다시 작성하겠습니다.
## 확실한 정보
### 완전히 단순화된 안전한 코드
```python
import frida
import sys
import os
executable = "mail.exe"
if not os.path.exists(executable):
print(f"❌ {executable} 파일이 없습니다.")
sys.exit(1)
try:
print(f"🚀 {executable} 실행 중...")
device = frida.get_local_device()
pid = device.spawn([executable])
session = device.attach(pid)
print(f"✅ 프로세스 생성 및 연결 완료 (PID: {pid})")
# 베이스 주소만 가져오기
base_script = session.create_script("""
var modules = Process.enumerateModules();
send(modules[0].base.toString());
""")
base_address = None
def get_base(message, data):
global base_address
if message['type'] == 'send':
base_address = message['payload']
print(f"🎯 베이스 주소: {base_address}")
base_script.on('message', get_base)
base_script.load()
import time
time.sleep(0.5)
base_script.unload()
if base_address:
# 주소 계산
ghidra_addr = 0x406688
ghidra_base = 0x400000
real_base = int(base_address, 16)
offset = ghidra_addr - ghidra_base
real_address = real_base + offset
print(f"📊 실제 주소: 0x{real_address:x}")
# 극도로 단순화된 패치 코드
patch_script = session.create_script(f"""
var addr = ptr("0x{real_address:x}");
console.log("패치 시작");
// 현재 바이트
var b1 = Memory.readU8(addr);
var b2 = Memory.readU8(ptr(addr.toInt32() + 1));
var b3 = Memory.readU8(ptr(addr.toInt32() + 2));
console.log("현재: " + b1.toString(16) + " " + b2.toString(16) + " " + b3.toString(16));
// 권한 변경
Memory.protect(addr, 3, "rwx");
// 패치
Memory.writeU8(addr, 0x31);
Memory.writeU8(ptr(addr.toInt32() + 1), 0xC0);
Memory.writeU8(ptr(addr.toInt32() + 2), 0x90);
// 확인
var n1 = Memory.readU8(addr);
var n2 = Memory.readU8(ptr(addr.toInt32() + 1));
var n3 = Memory.readU8(ptr(addr.toInt32() + 2));
console.log("수정: " + n1.toString(16) + " " + n2.toString(16) + " " + n3.toString(16));
if (n1 == 49 && n2 == 192 && n3 == 144) {{
console.log("성공");
send("OK");
}} else {{
console.log("실패");
send("FAIL");
}}
""")
def on_patch(message, data):
if message['type'] == 'send':
result = message['payload']
if result == "OK":
print("✅ 패치 성공!")
else:
print("❌ 패치 실패")
patch_script.on('message', on_patch)
patch_script.load()
time.sleep(1)
# 프로세스 실행
device.resume(pid)
print("\n▶️ 프로그램 실행됨!")
try:
input("종료하려면 Enter...")
except KeyboardInterrupt:
print("\n⏹️ 종료")
except Exception as e:
print(f"❌ Python 오류: {e}")
finally:
try:
if 'session' in locals():
session.detach()
if 'device' in locals() and 'pid' in locals():
device.kill(pid)
print("🧹 정리 완료")
except:
pass
```
## 주요 수정사항
1. **`.add()` 함수 제거** → `ptr(addr.toInt32() + 1)` 사용
2. **복잡한 함수 체인 제거** → 단순한 산술 연산
3. **엄격한 비교 제거** → 숫자 직접 비교 (49 = 0x31, 192 = 0xC0, 144 = 0x90)
4. **모든 고급 JavaScript 기능 제거** → 기본 문법만 사용
## 변경된 핵심 부분
```javascript
// 문제 코드
Memory.writeU8(target.add(1), 0xC0); // ❌ .add() 함수 오류
// 안전한 코드
Memory.writeU8(ptr(addr.toInt32() + 1), 0xC0); // ✅ 기본 산술
```
이제 모든 고급 JavaScript 함수를 제거하고 가장 기본적인 방법만 사용했습니다! 🔥카테고리 없음