매크로

조회 수 4856 추천 2 댓글 19

심심풀이로

설마 저같은 4류 프로그래머가 뚫겠냐 싶어서 해보다가

언팩킹 후에 ge.smail 내부 몇개 if-nez 같은거 제끼고 리팩킹했더니

unlock key 없이 매크로 갯수 제한 풀리고 Screenshot  기능 활성화되고

해제 되는거 보고 깜놀했습니다만...

이런 글 쓰면 안되는거겠죠??

문제시 바로 삭제 하겠습니다.

ㅠㅠ


------------------------------------------------------------------------------------


여러 글을 둘러보면서

특히 바람처럼님 글 보면서 무엇보다 Frep 개발자가 너무 마음 아파 할거 같아 apk를 직접 올리지 않겠습니다.


다만 고쳐야 할 파일 여러개 중 한가지에 대해서 고치는 법을 좀 더 상세히 기술하겠습니다.

글구 다음번엔 개발자님께서 스크립트 언어처럼 코딩 기능이 지원 되게 만들어 줄 수 없는지 요청 하고 싶습니다;;;


취미 삼아 연구 하는 터라 틀린 점이 많을 수 있습니다. 잘못 된 점 지적 바랍니다.


웬지 모르게 이 루틴이 의심스럽다는 감각(?)에 따라 무식하게 고쳐보았습니다.


fm.smail 에서  Checking 하는 Routine 으로 보이는 구간입니다.


1. com.x0.strai.frepkey 이라는 unlock key 패키지명이 보입니다.

2. unlockstate 라는 주목할 만한 글자도 보입니다.

3. 저도 넘 어려워서 전혀 모르겠지만 Signature를 가져 오거나 Checking 하는 루틴으로 보이는  iget-object  어쩌구 signatures, 또는 checkSignatures 에 주목

4. if-eqz V1, : cond_0 => 만약 결과(V1)가 0이라면 cond_0: 로 Jump 하란 의미로 보임...

5. Signature 웬지 항상 가져 와야할거 같은 느낌.... 붉은 라인은 모두 제거 하는걸로 결정

6. if 어쩌구로 조건이 조금만 안 맞아도 주황색의 라벨이 붙은 cond_0: 로 Jump하는걸로 추정되고 checkSignatures 를 거치지 않고 return을 만나 함수가 종료되는 느낌

7. 따라서 cond_0는 돌아 올 수 없는 공포(?)의 구간으로 추정 이를 회피할 수 있는 유일한 루틴은 cond_1으로 가는 길....

goto :cond_1 를 추가하여 회생(?)의 길을 열어 줍니다.

8. 회생에 길 cond_1: 루틴에서도 공포의 cond_0 을 만나는 루틴들이 보입니다. 무시무시한 녀석이니 전부 제거

9. 도중에 cond_2로 가는 길목에 Signature를 가져오는걸로 추정되는 루틴이 보임 이를 거쳐야 할 것 같은 예감... 에

if-nez v0, :cond_2 제거 cond_2 루틴에는 unlockstate가 보임 그 이하엔 공포의 cond_0로 가는 루틴이 없으므로 맘 편히 PASS


핵심 요약:

1. 보라색 루틴에 의해 해당 루틴의 중요성을 감지 한다. 

2. 공포의 아무것도 안 한채 Return 을 일으키는 cond_0 루틴의 심각성을 인지 

3. 도중 피할수 없는 cond_0 루틴 좌절하지 말고... 절때 회피 신공 goto :cond_1 님의 도움을 받는다.

4. cond_2는 아름다운(?) unlock 구간임을 인지

5. 그 이하엔 cond_0 루틴이 없어 안심...



유사 루틴이 다른 smail 파일 에도 있으니 비슷한 방법으로 제거 하면 됩니다

참고로 한 손 가락안에 들어올 정도로 몇 개 없습니다


.method private u()V
    .locals 5

    const/4 v3, 0x1

    const/4 v0, 0x0

    iput-boolean v0, p0, e:Z

    :try_start_0
    invoke-virtual {p0}, getPackageManager()Landroid/content/pm/PackageManager;

    move-result-object v0

    invoke-virtual {p0}, getPackageName()Ljava/lang/String;

    move-result-object v1

    const/16 v2, 0x40

    invoke-virtual {v0, v1, v2}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;

    move-result-object v1

    if-eqz v1, :cond_0

    iget-object v2, v1, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;

    if-eqz v2, :cond_0

    iget-object v2, v1, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;

    array-length v2, v2

    if-ge v2, v3, :cond_1
    goto :cond_1

    :cond_0
    :goto_0
    return-void

    :cond_1
    invoke-virtual {p0}, getResources()Landroid/content/res/Resources;

    move-result-object v2

    sget v3, Lcom/x0/strai/frep/kt;->apkmd5:I

    invoke-virtual {v2, v3}, Landroid/content/res/Resources;->getText(I)Ljava/lang/CharSequence;

    move-result-object v2

    if-eqz v2, :cond_0

    invoke-virtual {p0}, getPackageName()Ljava/lang/String;

    move-result-object v3

    const-string v4, "com.x0.strai.frepkey"

    invoke-virtual {v0, v3, v4}, Landroid/content/pm/PackageManager;->checkSignatures(Ljava/lang/String;Ljava/lang/String;)I

    move-result v0

    if-nez v0, :cond_2

    invoke-interface {v2}, Ljava/lang/CharSequence;->toString()Ljava/lang/String;

    move-result-object v0

    iget-object v1, v1, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;

    const/4 v2, 0x0

    aget-object v1, v1, v2

    invoke-virtual {v1}, Landroid/content/pm/Signature;->toByteArray()[B

    move-result-object v1

    invoke-static {v1}, Lcom/x0/strai/frep/kz;->b([B)Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_2

    invoke-virtual {p0}, d()Z

    move-result v0

    if-eqz v0, :cond_2

    invoke-virtual {p0}, b()Z

    move-result v0

    if-nez v0, :cond_2

    const/4 v0, 0x1

    iput-boolean v0, p0, e:Z

    :cond_2
    iget-object v0, p0, b:Landroid/content/SharedPreferences;

    invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor;

    move-result-object v0

    const-string v1, "unlockstate"

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v2

    invoke-interface {v0, v1, v2, v3}, Landroid/content/SharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;

    move-result-object v0

    invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z
    :try_end_0
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

    goto :goto_0

    :catch_0
    move-exception v0

    goto :goto_0
.end method


  



List of Articles
분류 제목 글쓴이 최근변경 추천
질문 메m 반복실해안뜨게하는방법있나요? 4 Aushbs 2017.02.27 2/0
자유 메이플스토리m 프렙유저분들 단톡방 4 성면 2017.03.31 2/0
정보 메이플 m 프렙 됩니다. 뀨!!!! 난 바보였어!!(★추가)-... 54 하마 2017.09.15 2/0
공유 김밥매크로 3.3.3v 세나매크로 12 김밥마리 2016.11.26 2/0
정보 Frep 3.9 우회 + Unlock 방법, 핵심 사항 정리 19 바슈TS 2017.03.26 2/0
공유 KON 매크로 with 프렙 for 갤럭시노트5 5 모아봅시다 2016.11.26 2/0
정보 프렙 우회버전 입니다. 3.9(패치3) 버전입니다. 17 완소현이 2023.05.25 2/0
공유 [세나] 옵티머스g - 3쫄작+황방+결장 +재시작 4 google 2015.11.05 2/0
자유 제 db찾는분들이 아직도 계셧군요ㄷㄷ 5 김밥마리 2015.10.28 2/0
공유 레이븐 노트2,갤3 dk 하늘광산 업뎃 4 lovenvy84 2016.03.15 2/0
공유 세나 2쫄작 황금결장 반복 db 3 뭐먹고사냐 2015.09.28 2/0
자유 핸펀재부팅시...프렙 2 불타는창자 2015.10.23 2/0
자유 [김밥마리님 프렙 쓰시는 분] 세나 쫄 교체 수정 Tip 4 주니94 2015.08.11 2/0
정보 프렙 팁 공유...(세나) 25 몬스터MD 2024.04.02 2/0
자유 프렙은 기능을 만들어도 꼬옥 하나씩은 멍청하게 만드네요 5 옹스컴 2015.06.12 2/0
자유 프렙 DB파일은 어디에 넣어야 하나요>? 13 야놔봐 2015.06.12 2/0
공유 세나 ) 2560 x 1440 Frep db 24 장담은 2017.11.07 2/0
공유 세나 ) 2560x1440 쫄작 db 공유합니다. 10 장담은 2015.05.30 2/0
공유 [영웅]노트4(1440 x 2560) Frep 디비 입니다. 11 절정일도 2015.07.22 2/0
정보 프렙 3.5, 3.6, 언락키 입니다. 9 이웃집달건이 2015.11.23 2/0
Board Pagination Prev 1 2345678910 ... 212 Next
/ 212

전체 최신 인기글

전체 주간 인기글