์ด๋ฒ์๋ ๋ฃจํธ ๊ฐ์ง ์ฐํ๋ฅผ ์ด์ด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐํ๋ฅผ ํด๋ณด๊ฒ ๋ค.
์ด๋ฒ์๋ ๊ตณ์ด ๋ฃจํ ์ด ํ์์์ผ๋๊น ๋ น์ค ์ค์ ์์ ROOT๋ฅผ ๊บผ์ฃผ์๋ค.
์ฑ ๋ถ์
๋ณด๋ ๊ฒ์ฒ๋ผ EditText์ ์๋ฌด ๊ธ์๋ฅผ ๋ฃ๊ณ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ง๋ ์ ๋ต์ด ์๋๋ผ๊ณ ๋ฌ๋ค.
์ด๋ฒ ๋ชฉํ๋ ์ด๋ฅผ ์ฐํํ์ฌ ์ฑ๊ณต์ด ๋จ๊ฒํ๋ ๊ฒ
์ฑ ๋์ปดํ์ผ ํ๊ธฐ
์ ๋์ ๊ณผ์ ์์ ์ด๋ค ๋ชจ๋์ด ์ค๊ฐ๋์ง ๋ ๊ทธ ๋ชจ๋์์๋ ์ด๋ค ์์๋ค์ด ์๋์ง ํ์ธ์ ์ํด์ ์ฑ ๋์ปดํ์ผ๋ฌ์ธ jadx๋ฅผ ์ค์นํด์ค๋ค.
https://github.com/skylot/jadx/releases
Releases · skylot/jadx
Dex to Java decompiler. Contribute to skylot/jadx development by creating an account on GitHub.
github.com
jadx-gui์ Uncrackable1 apk๋ฅผ ๋ก๋ ํด์ค๋ค.
๊ทธ๋ฌ๋ฉด ๋๋๊ฒ๋ ์๊ทธ๋์ณ ๋ฟ๋ง ์๋๋ผ ๋ฆฌ์์ค, MainActivity ๊ฐ์ ๋ฏผ๊ฐํ ์์ค๋ค์ด ๋ค ๊ณต๊ฐ๊ฐ ๋๋ค.
์ ์ฌํ ๋ด์ผํ ๋ถ๋ถ์ ๋ฐ๋ก ์ด verify ํจ์ ๋ถ๋ถ
๋ฐ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฒ์ฆํ๋ ์์ญ์ธ๋ฐ, EditText์ ์ ๋ ฅํ ๊ฐ์ ๊ฐ์ ธ์ a.a๋ผ๋ ๋ฉ์๋์ ์ธ์๋ฅผ ์ค๋ค์ ๊ทธ ๋ฆฌํด ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ์ฑ๊ณต๊ณผ ์คํจ๊ฐ ๊ฒฐ์ ๋๋ค.
a.a(obj)๋ฅผ ๋๋ธ ํด๋ฆญํด์ ๋ ๋ฉ์๋ ๋ด๋ถ๋ฅผ ํ์ธํด ๋ณธ๋ค.
์ด๊ณณ์ด a.a ๋ฉ์๋์ ์ค์ฒด์ด๋ค.
AES ๋ฐฉ์์ผ๋ก ์ด๋ค ์ํธํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณตํธํํ์ฌ ์ฌ์ฉ์๊ฐ ๋ฐฉ๊ธ ์ ๋ ฅํ ํ ์คํธ์ ๋น๊ต๋ฅผ ํ๋ค์ true ํน์ false๋ฅผ ๋ฆฌํดํ๋ ๋ฐฉ์์ด๋ค.
๋น๋ฐ๋ฒํธ ์ฐํ 1
๋น๋ฐ๋ฒํธ๋ฅผ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ๋ ๋ ๊ฐ์ง์ธ๋ฐ, ํ๋๋ ๊ฐ๋จํ ๊ฒ์ฆ ํจ์์ ๋ฆฌํด ๊ฐ์ ๋ฌด์กฐ๊ฑด true๋ง ๋ฐํํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
์ด ๋ถ๋ถ์ return์ธ str.equals...๋ฅผ true๋ก ๋ฐ๊พธ์ด ์ค๋ค๋ฉด ์๋ฌด ํ ์คํธ๋ฅผ ๋ฃ์ด๋ ์ฑ๊ณต์ ์ถ๋ ฅํ ๊ฒ์ด๋ค.
[app2.py]
import frida, sys
def on_message(message, data):
print(message)
PACKAGE_NAME = "Uncrackable1"
jscode = """
console.log("[+] Start Script");
Java.perform(function() {
console.log("[+] Hooking System.exit");
var aClass = Java.use("sg.vantagepoint.uncrackable1.a");
aClass.a.implementation = function(str) {
console.log("[+] a.a ํจ์ ํธ์ถ ๊ฐ์ง");
return true;
}
});
"""
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()
์ด์ ์ ์ฌ์ฉํ ์์ค๋ฅผ ์ฝ๊ฐ ์์ ํ ๊ฒ์ด๋ค.
"sg.vantagepoint.uncrackable1.a" ํด๋์ค๋ฅผ ๋ถ๋ฌ์์ a ํจ์๋ฅผ ํธ์ถ์ ๊ฐ์งํ์ฌ ์ด๋ฅผ ํํนํด์ return true๋ก ๋ฐํํ๊ฒ ์ํจ๋ค.
์ ๋ง๋ก ์๋ฌด๋ฐ ํ ์คํธ๋ฅผ ๋ฃ์ด๋ ๋ฌด์กฐ๊ฑด Success๊ฐ ํธ์ถ๋๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํ๋ค.
๋น๋ฐ๋ฒํธ ์ฐํ 2
์ด๋ฒ์๋ ์กฐ๊ธ ๊ณ ๊ธ์ ์ธ ๋ฐฉ์์ผ๋ก ์ง์ ์ํธํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณตํํ๋ ๊ฒ์ ์ฐพ์๋ด ํ๋ฌธํ๋ ๋น๋ฐ๋ฒํธ๋ฅผ getํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ค๋ฉด ๊ตณ์ด ์ฑ์ด ๋๋ฒ๊น ์ ํด์ ํจ์ ์กฐ์์ ํตํด์ ์ฐํํ์ง ์๊ณ , ์์๋ธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ ํต๊ณผํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๋ ์ด์ ์ด ์๋ค.
๊ทธ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๋ฌธํํ๋ ๋ถ๋ถ์ ์ฐ์ ์ฐพ์์ผ ํ๋ค.
์ฝ๋๋ฅผ ํ์ธํด๋ณธ ๊ฒฐ๊ณผ sg.vantagepoint.a.a.a ์ด๊ณณ์ด ๊ฐ์ฅ ์ ๋ ฅํ๋ค.
์ด๋ ์์ด ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ return ํ๋ ๊ฒ์ ๊ฐ์ ธ์์ ์ฝ์์ฐฝ์๋ค ์ถ๋ ฅํด๋ณด๋ฉด ๋์ง ์์๊น ์ถ์๋ค.
jscode = """
console.log("[+] Start Script");
Java.perform(function() {
console.log("[+] Hooking System.exit");
var aClass = Java.use("sg.vantagepoint.a.a");
aClass.a.implementation = function(a, b) {
console.log("[+] ํธ์ถ ๊ฐ์ง!");
var retVal = this.a(a, b);
console.log("retVal:", retVal);
return retVal;
}
});
"""
์ด๋ฐ์์ผ๋ก ๊ธฐ์กด์ ํจ์๋ฅผ ์์ ํ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋์ฒด๋ฅผ ํ๋๊ฒ ์๋๋ผ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์ค๊ณ ์ถ๋ค๋ฉด this.ํจ์์ด๋ฆ()์ผ๋ก ์จ์ฃผ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ๋์ค๋ return value์ธ retVal์ ์ฝ์์ ์ถ๋ ฅ์ ์์ผ๋ณด๋...
์ ์ซ์๋ค์ด ๋์ด์ด ๋์ค๋๋ฐ ์ด๋ ์์คํค์ฝ๋ ์ ์๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
์๊ฒ์ String์ผ๋ก ๋ค์ ๋ณ๊ฒฝํด์ฃผ๊ฒ ์์
jscode = """
console.log("[+] Start Script");
Java.perform(function() {
console.log("[+] Hooking System.exit");
var aClass = Java.use("sg.vantagepoint.a.a");
aClass.a.implementation = function(a, b) {
console.log("[+] ํธ์ถ ๊ฐ์ง!");
var retVal = this.a(a, b);
console.log("retVal:", retVal);
var password = "";
for(var i=0; i<retVal.length; i++){
password += String.fromCharCode(retVal[i]);
}
console.log('Password:', password);
return retVal;
}
});
"""
๋ฐ๋ก "I want to belive"๊ฐ ๋น๋ฐ๋ฒํธ
[์ ์ฒด ์์ค]
import frida, sys
def on_message(message, data):
print(message)
PACKAGE_NAME = "Uncrackable1"
jscode = """
console.log("[+] Start Script");
Java.perform(function() {
console.log("[+] Hooking System.exit");
var aClass = Java.use("sg.vantagepoint.a.a");
aClass.a.implementation = function(a, b) {
console.log("[+] ํธ์ถ ๊ฐ์ง!");
var retVal = this.a(a, b);
console.log("retVal:", retVal);
var password = "";
for(var i=0; i<retVal.length; i++){
password += String.fromCharCode(retVal[i]);
}
console.log('Password:', password);
return retVal;
}
});
"""
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()
'๐์ ๋ณด๋ณด์ > ๋ชจ๋ฐ์ผ ๋ณด์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๋ฐ์ผ ํดํน - ์๋๋ก์ด๋ RAT(AndroRAT) (0) | 2022.08.23 |
---|---|
ํ๋ฆฌ๋ค - Uncrackable2 ๋น๋ฐ๋ฒํธ ํด์ ํ๊ธฐ (0) | 2022.06.24 |
ํ๋ฆฌ๋ค - Uncrackable1 ROOTING ๊ฐ์ง ์ฐํํ๊ธฐ (0) | 2022.06.23 |
ํ๋ฆฌ๋ค - NOX ํ๊ฒฝ ์ค์น (0) | 2022.06.23 |
๋ชจ๋ฐ์ผ ํดํน - class ํ์ผ์ ๋์ปดํ์ผํ์ฌ java ํ์ผ ๋ง๋ค๊ธฐ (0) | 2021.12.11 |