못쓰게 해서 빡쳐서
astro 파일관리자로 어플 백업해서 nh.apk 만든다음
apktool.jar 이용해서 가져온 AndroidManifest.xml 보니까
minSdkVersion 은 5고 android.intent.category.LAU-NCHER 걸려있는 클래스가 .menu.activity.MainMenu 더라구
그래서 우선 dex2jar.jar 이용해서 nh.jar 를 만들어서 jd-gui 로 켜서 보니까
nh.smart.menu.activity 의 MainMenu.class 보니 onCreate 가 떡하니 있대
얼씨구나 하고 내용을 보니까 간단히 추리면
public void onCreate(Bundle) {
if (a3030.check("AHN_4859201847_PX") == 0) {
어쩌고
}
else {
저쩌고
customDialog("", "루팅된 단말기는 뱅킹서비스를 이용하실 수 없습니다.", 20);
}
}
였는데
잡았다 요놈! a3030 클래스의 check 메소드 리턴값이 0이 아니면 루팅된줄 아는구나!
하고 외쳤지
이때까지는 a3030 이 뭐하는 클래스인지 몰랐는데 뒤져보니까
com.ahnlab.a3030 클래스에 있더라구
아 안슨상님이 루팅검사를 하시는구나 해서 a3030.class 를 열었어
그랬더니 풉
public class a3030 {
public static int AHNERROR;
public static int AHNFALSE;
public static int AHNTRUE = 1;
static {
AHNFALSE = 0;
AHNERROR = -1;
}
public static native int a3031(String s);
public static int check(String s) {
int i = AHNFALSE;
try {
System.loadLibrary("a3030");
if (a3031(s) > 0)
i = AHNTRUE;
return i;
} catch ...
}
}
라는거야
a3030 이라는 라이브러리가 뭐고 a3031 이라는 외부 함수가 뭔지 내가 알 바 없지만 어쨌든
a3031 함수의 결과 값이 0보다 크면 i 는 1이 되고 그 결과값을 받은 onCreate 안에서는 루팅된 거라 생각하고
나에게 'ㅅ'ㅗ 하고 엿을 날릴거란 말이야
그래서 어찌할까 고민하다가 nh.apk 에서 classes.dex 가져와서 baksmali.jar 이용해서 smali 파일들 받아오고
nh/smart/menu/activity/MainMenu.smali 메모장으로 열어서 AHN_4859201847_PX 를 찾아봤어
그러자 확실히
.line 82
const-string v0, "AHN_4859201847_PX"
invoke-static {v0}, Lcom/ahnlab/a3030/a3030;->check(Ljava/lang/String;)I
move-result v0
if-eqz v0, :cont_1c
라고 써있더군
사실 오늘 첨 접한 언어라 뭐 시발 알아먹지도 못했지만 차근차근 보니까 대충 눈에 익는 것도 있고 이해가 가더라고
바이트코드 종류일테니까
const-string 변수 v0 에 AHN_4859201847_PX 를 넣고
그걸 인자로 받는 check 함수를 invoke-static? 함수 콜 같은걸 한다고 생각했지
그리고 그 결과값을 다시 v0에 받고
eqz는 보나마나 equal zero 일테니까 if-eqz 는 v0 가 0일 때 cont_1c 로 점프하라고 하는 거일거 같더군
하지만 아직 감을 못잡은 나는 여기서 다시
com/ahnlab/a3030/a3030.smali 를 열어보기로 했어
그러자 이게 왠걸!
조금만 내려가자
.method public static check(Ljava/lang/String;)I
어쩌고
.prologue
.line 11
sget v0, Lcom/ahnlab/a3030/a3030;->AHNFALSE:I
라는게 있는거야
아! 여기서 i 값을 0으로 초기화했구나! 직감했지
그리고 좀 더 내려가보니
.line 29
sget v0, Lcom/ahnlab/a3030/a3030;->AHNTRUE:I
.line 31
:cond_f
return v0
가 보이네?
뻔하지 뭐 i 값을 1로 바꿔주고 return i 한다는 그 내용과 같은 부분이겠지
그래서 난 AHNTRUE 를 AHNFALSE 로 고치기만 했어
sget v0, Lcom/ahnlab/a3030/a3030;->AHNFALSE:I
이렇게
그리고 저장하고
다시 smali.jar 이용해서 수정된 classes.dex 파일을 만들어주고 nh.apk 파일에 덮어씌웠지
그리고 나의 사랑스러운 갤넥에 옮겨와서 설치를 하는데
이럴수가 설치가 안되는거야
그래서 검색에 검색을 거듭한 결과 sign 과정이 없다는걸 알게됐지
motizen 에서 sign 해주는 툴이 있어서 그냥 그걸로 함 ㅋ
그리고 넣고 설치했더니 설치 성공
실행했더니 실행 성공
근데 인증서를 못가져오는게 함정
세줄요약
1. 갤넥에서 농협어플이 루팅된 단말기라고 안됨
2. 디컴파일해서 단어 하나 수정하고 크랙 성공
3. 결국엔 인증서가 안올라와서 fail
별로 봐달란건 아니고
방금 한거 정리하는 겸 써봤어
근데 au-n 은 왜 금지어인거야? ㅡㅡ
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.