| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- jeb_mcp
- Malware Sample
- EC2
- Frida
- ue4dumper
- aes
- 많다..
- ssrf
- 취약점
- cve-2025-55182
- mitmproxy
- 안전결제
- shell_gpt
- 변태는
- 중고나라
- 척추관협착증
- 내부확산
- LFI
- 채팅환전사기
- AWS
- 네이버카페
- S3
- Sequoia
- react2shell
- 허리디스크
- self-signed
- 모의해킹
- XSS
- intelmac
- Today
- Total
annyoung
Frida hooking oracle connect CS binary 본문
Delphi로 만든 CS 프로그램 모의해킹 진행하면서 몇가지 적어보려고 한다.
기본적으로 델파이로 만든 CS 프로그램의 경우 폴더 구조를 살펴보면 *.bpl 이라는 확장자를 사용하곤 하는데 Borland Package Library의 줄임말로, 쉽게 말하자면 Delphi에서 사용하기 위한 dll이라 생각하면 된다. 그렇기에 bpl 확장자가 보이면 "아. 델파이구만!" 하면 된다.
대다수의 델파이로 만든 CS 프로그램이 Oracle TNS Protocol을 이용해 DB와 직접 커넥션을 맺는데, 이렇게 DB로 바로 접속하게되면 개발사의 장점은 유지보수가 쉽다는거고, 단점은 DB 계정 정보가 무조건적으로 노출된다는거다.
여기서 DB 계정정보를 Config.ini에 암호화해서 저장하더라도 DB 연결을 위해 복호화하게 되는데 치트엔진으로 string 위주로 간단하게 메모리에서 열심히 찾아봐도 되고, 설정을 저장하고 있는 파일(Config.ini 등)에 나오는 아이디, 비밀번호를 서로 바꿔서 메모리를 확인하는 꼼수를 사용해도 된다.
아니면 그냥 loadLibrary로 원하는 호출 이후 frida 스크립트짜서 돌려도 되긴한다.
다음은 dbxora30.dll!DBXConnection_Connect 이후, char* 문자열 3개(DB, USER, PASS)를 받아 길이를 계산하고 실제 OCI(Oracle Call Interface) 연결 함수로 넘겨주는 wrapper를 후킹하는 스크립트다.
참고로 여기서 가져오지 못하는 대상 아이피 또는 Local Naming을 이용해 접속하는 경우 tnsnames.ora 파일이나 wireshark에서 tns로 필터링해서 확인하면 된다.
/**
* Frida>=17.5.1
* Hook oracle connection db, user, password
*/
const loadLibrary = Process.getModuleByName("kernel32.dll").getExportByName("LoadLibraryA");
let isModuleLoaded = false;
let isHookAttached = false;
Interceptor.attach(loadLibrary, {
onEnter: function (args) {
this.library_path = args[0].readUtf8String();
if (this.library_path === "dbxora30.dll") {
isModuleLoaded = true;
}
},
onLeave: function (retval) {
if (isModuleLoaded && !isHookAttached) {
isHookAttached = true;
const hookTarget = Process.getModuleByName("dbxora30.dll").base.add(0x12FF8);
Interceptor.attach(hookTarget, {
onEnter: function (args) {
const db = args[1].readAnsiString();
const user = args[2].readAnsiString();
const pwd = args[3].readAnsiString();
console.log();
console.log(`[+] Oracle Connect`);
console.log(`DB : ${db}`);
console.log(`User : ${user}`);
console.log(`Password: ${pwd}`);
}
});
}
}
});
'모의해킹' 카테고리의 다른 글
| docxtpl을 이용한 보고서 자동화 (0) | 2026.02.23 |
|---|---|
| SSRF (1) | 2026.01.22 |
| git config request bypass (0) | 2025.12.05 |
| mitmproxy response 변조 (0) | 2025.10.21 |
| mitmproxy로 네트워크 패킷 수정하기 (0) | 2025.10.16 |