UnCrackable-Level2๋ฅผ jadx๋ก ์ด์ด๋ณด๋ ์๋ฒ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ค ๋ฉ์๋์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ๋ฅผ ๊ฑด๋ด์ฃผ์ด true, false๋ฅผ ๋ฐํํ๊ณ ์๋ค.
ํด๋น ํจ์๋ฅผ ์ซ์๊ฐ๋ฉด ์ bar๋ผ๋ ํจ์์๋ค๊ฐ ๋ ๊ฐ์ ๊ฑด๋ด์ ๋ฆฌํด ๊ฐ์ ๋ฐํํ๊ณ ์๋๋ฐ, ๋ณด๋ค์ํผ bar ํจ์๋ native๋ก ์ ์ธ์ด ๋์ด์์ผ๋ฉฐ, ํจ์์ ๋ชธํต์ ๋ณด์ฌ์ง์ง๊ฐ ์๋๋ค.
์๋ฐ native ํค์๋
์ฐธ๊ณ : https://fors.tistory.com/80
์๋ฐ์ native ํค์๋๋ ์๋ฐ๋ก ์ฐ์ฌ์ง ์ธ์ด๊ฐ ์๋ ์ฃผ๋ก C์ธ์ด, C++ ๊ฐ์ ์ธ๋ถ์ ์คํ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ํด์ค๋ค.
์ด ์ธ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์๋ ค์ง .so๋ .dll ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์๋ฏธํจ
์ฆ bar ํจ์์ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ํ์ธํ๊ณ ์ถ์ผ๋ฉด .so ํ์ผ์ด ์ด๋์๋์ง ์ฐพ์๋ด์ผํ๋ค.
MainActivity์ ์ฝ๋๋ฅผ ์ ์ดํด๋ณด๋ฉด ์์์ foo๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ ํ์ธํ ์๊ฐ ์์๋ค.
์ด foo๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ apk ํ์ผ ์ด๋๊ฐ์ ์กด์ฌํ ๊ฒ์ด๋ค.
์ง์ apk๋ฅผ ์์ถํด์ ํ์ฌ์ lib ํด๋๋ฅผ ํ์ธ ํด๋ดค๋ค.
๊ทธ๋ฌ๋๋ ์ ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ ํ๋๊ฐ ๋ฉ๊ทธ๋ฌ๋ ์๋ ๊ฒ
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ๋ถ์ํ๊ธฐ ์ํด์ ida ๊ฐ์ ๋์ค์ด์ ๋ธ๋ฌ๋ฅผ ์ด์ฉํด์ค๋ค.
ida์ libfoo.so๋ฅผ ๋๋๊ทธ ์ค ๋๋ํด์ ๋ก๋ ํ Exports ํญ์ ๋๋ฌ์ค๋ค.
๋๋ฌ์ฃผ๊ฒ ๋๋ CodeCheck_bar๋ผ๋ Export๊ฐ ๋ณด์ด๋๋ฐ ๋ ๋๋ธํด๋ฆญํด์ ๋ด์ฉ์ ํ์ธ
ida๊ฐ ์์ฃผ ์น์ ํ๊ฒ ๊ทธ๋ํ ํํ๋ก ๋์๊ณผ์ ์ ๋ณด์ฌ์ฃผ๊ณ ์๋๋ฐ ์ฌ๊ธฐ์ F5๋ฅผ ๋๋ฌ์ฃผ๋ฉด ์ง์ C์ธ์ด ํํ๋ก ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ์ด ๊ฐ๋ฅํจ
* ida free ๋ฒ์ ์ x64 ๋ฒ์ ๋ง C์ธ์ด ์ฝ๋๋ก ๋ณํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ฏ๋ก, ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ฌ ๋์๋ x64๋ก ๋ถ๋ฌ์์ผ ํ๋ค.
๋์๊ฒ ์์ฃผ ์ต์ํ ์ฝ๋๋ค์ด ๋ณด์ธ๋ค.
๊ทผ๋ฐ ๊ฐ์ฅ ๋์ ๋์ธ๊ฑด ์ ๊ธฐ strcpy์ ์ธ์๋ก Thanks for all the fish ๋ถ๋ถ.
v6์ด๋ผ๋ ๋ณ์์๋ค ๋ฌธ์์ด์ ๋ณต์ฌ ํด์ฃผ๋ ์ญํ ์ ํ๋ ํจ์์ธ๋ฐ, ์ ๊ธฐ ๋ฌธ์ ๋ถ๋ถ์ด ๋น๋ฐ๋ฒํธ์ผ ํ์จ์ด ๋์๋ค.
๋ฌธ์์ด "Thanks for all the fish"๋ฅผ ๋ณต์ฌํ๊ณ ์ฑ์๋ค ๋ฃ๊ณ ๋ฒํผ์ ๋๋ฌ๋ณด๋ ์ ๋ง ๋ง๋ค๊ณ ๋์จ๋ค.
์ด๋ฒ์๋ ๊ตณ์ด frida์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ์ง ์๊ณ ๋ค๋ฅธ ํด๋ค์ ์ด์ฉํด์ ์ถฉ๋ถํ ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
๋ค๋ฅธ ๋ธ๋ก๊ฑฐ๋ถ์ ๋ณด๋ frida๋ก libfoo.so๋ฅผ ํํนํด์ ๋์ ๊ณผ์ ์ ์์๋ด์ ์ง์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด๋๊ฒ ๊ฐ๋ฅํ๋ค.
https://dokhakdubini.tistory.com/361
[OWASP-MSTG] Uncrackable level 2 Write-Up
๋๊ฐ์ด root detection์ ์งํํ๋ค์. ์ด๊ฑด uncrackable1์ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ๋ค๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ์ ์ ์๋๋๊ฑธ ๋ณผ ์ ์์ต๋๋ค ์ง์ง ๋ฌธ์ ๋ ์ฌ๊ธฐ์๋ถํฐ์ฃต ๊ทผ๋ฐ verify๋ฅผ ๋ถ์ํ๊ธฐ ์ ์ MainActivity.
dokhakdubini.tistory.com
libfoo.so์ strncmp ํจ์ ํํน
[crackme2.py]
import frida, sys
def on_message(message, data):
print(message)
PACKAGE_NAME = "Uncrackable Level 2"
jscode = """
console.log("[+] Start Script");
Java.perform(function() {
Interceptor.attach(Module.getExportByName('libfoo.so', 'strncmp'), {
onEnter: function (args){
var param1 = args[0];
var param2 = args[1];
var param3 = args[2];
if( Memory.readCString(param1).includes("111") ){
console.log("[*] Your Input = " + Memory.readCString(param1));
console.log("[!] Secret Code = " + Memory.readCString(param2));
}
},
});
});
"""
process = frida.get_usb_device(1).attach(PACKAGE_NAME)
script = process.create_script(jscode)
script.on('message', on_message)
print('[+] Running Hook')
script.load()
sys.stdin.read()
์ฝ๋๋ Interceptor.attach๋ผ๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋์ ํํนํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ด๋ จ ๋ฌธ์: https://frida.re/docs/javascript-api/#interceptor
'libfoo.so'์ 'strncmp'๊ฐ onEnter ๋์์ ๋ ์๋ํ๋ ํจ์๋ฅผ ์ ์ ํด์ฃผ์๋ค.
์ด strncmp์ ๋๋ฒ์งธ ์ธ์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๋ชฉ์ ์ธ๋ฐ, && ์์ ๋ณด๋ฉด ์ ๋ ฅ ์ฌ์ด์ฆ๋ ๋ฌด์กฐ๊ฑด 23๊ฐ์ด์ด์ผ ํ๋ค๊ณ ์ ํ์๋ค.
ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ AND ์กฐ๊ฑด๋ฌธ์ด ํ๋๋ผ๋ ์ผ์นํ์ง ์์ผ๋ฉด,
๋ค์ ์กฐ๊ฑด๋ค์ ๊ทธ๋ฅ ๋ฌด์ํด๋ฒ๋ฆฌ ๋๋ฌธ์ ๋ฐ๋์ ์ ๋ ฅ ์ฌ์ด์ฆ๊ฐ 23๊ฐ๊ฐ ๋์ด์ผ์ง strncmp ํจ์๊ฐ ํธ์ถ์ด ๋๋ค.
์ฑ์์ 1์ 23๊ฐ ์ ์ด์ค ๋ค์ ๋ค์ ์ฝ์์ฐฝ์ ํ์ธํด๋ณด๋ฉด
strncmp์ param2 ์ฆ ๋๋ฒ์งธ ์ธ์์ ๊ฑด๋ด์ค ๊ฐ์ด ๋ณด์ฌ์ง๊ฒ ๋๋ค.
'๐์ ๋ณด๋ณด์ > ๋ชจ๋ฐ์ผ ๋ณด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๋ฐ์ผ ํดํน - ์ ํ๋ฒํธ ๊ฐ๋ก ์ฑ๊ธฐ (1) | 2022.08.23 |
---|---|
๋ชจ๋ฐ์ผ ํดํน - ์๋๋ก์ด๋ RAT(AndroRAT) (0) | 2022.08.23 |
ํ๋ฆฌ๋ค - Uncrackable1 ๋น๋ฐ๋ฒํธ ํด์ ํ๊ธฐ (0) | 2022.06.24 |
ํ๋ฆฌ๋ค - Uncrackable1 ROOTING ๊ฐ์ง ์ฐํํ๊ธฐ (0) | 2022.06.23 |
ํ๋ฆฌ๋ค - NOX ํ๊ฒฝ ์ค์น (0) | 2022.06.23 |