Android 역방향 - apk 패키지 이름 변경, 멀티플렉스

8180 단어 역방향android
전언
최근 어떤 자리에서 어떤 사람이 나에게 잘 만든 가방을 어떻게 가방 이름을 바꾸느냐고 물었다.제 친구들을 아시다시피 저는 실험을 하고 자신의 방식을 여러분께 공유하는 것을 좋아합니다. 이번에 저는 읽기 유형 앱을 선택하여 무작위로 선택했습니다.먼저 효과를 보다
어떻게 했느냐면 제 생각을 여러분께 나눠드리겠습니다.ps:삭제!개인 학습용으로만 제공되는 것은 상업용으로 적합하지 않다.
준비 작업
옹알옹알 읽다1.1 app apktool 편집기
사고의 방향
  • apktool로 가방 뜯기 미쿠독서
  • AndroidManifest를 먼저 변경합니다.xml 안에 있는 패키지 이름
  • 전역 변경com.xxx.xxxx 유사한 패키지 이름
  • smali 형식 코드의 패키지 이름 문자열 전역 변경 Lcom/xxx/xxx
  • 모든com/xxx/xxx 폴더의 이름을 전역적으로 변경합니다. 자바 파일에서 패키지 이름과 폴더 경로가 대응해야 하기 때문입니다
  • 앱의 원래 패키지 이름이나 서명 검사 관련 smali 코드 삭제
  • 변경
  • apktool b 패키지 apk
  • jarsigner 서명, apk 설치
  • 역방향 시작
    포장을 풀다
    apktool d com.ophone.reader.ui_7.1.1_129.apk

    패키지 이름 변경
    안드로이드 Maifest에서.xml에서 우리는 그의 가방 이름이com이라는 것을 발견했다.ophone.reader.ui, 내 가방 이름을com으로 바꿀게.ophone.reader.ui01이죠.
    모든 com.ophone.reader.ui를com으로 바꿉니다.ophone.reader.ui01
    smali 패키지 이름 변경
    모든 Lcom/ophone/reader/ui를 Lcom/ophone/reader/ui01로 바꿉니다.
    폴더 이름 변경
    모든com/ophone/reader/ui의 ui 폴더 이름을 ui01ps로 변경합니다: 사실 위 세 단계는 프로그램으로 쓸 수 있죠. 대체적으로 파일의 읽기와 쓰기, 이름 바꾸기 등입니다.
    포장을 시작하다
    앱의 가방 이름을 변경하여 포장을 준비,
    apktool b com.ophone.reader.ui_7.1.1_129

    싸놓은 가방은 제 경로가com에 있습니다.ophone.reader.ui_7.1.1_129/dist에서 우리가 손발을 거꾸로 움직인 apk를 봤어요.
    그리고 서명해서 다음 명령을 실행합니다
    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore "MartinHanKey.jks" -signedjar _signed.apk ".\com.ophone.reader.ui01_7.1.1_129.apk" "MartinHan"

    이상의 명령은 설명하지 않겠습니다. 구체적으로 스스로 조회할 수 있습니다.
    실행
    운행을 시작하였는데 다음과 같은 문제가 발견되었다. 그림과 같다.
    개발자가 서명 검사나 패키지 이름 검사를 추가한 것이 분명합니다.
    사고의 방향
    나중에 나는 다음과 같은 문자열을 검색했다. "네가 설치한 버전 xxx"는 다음과 같은 문자열을 찾았다
    <string name="check_sign_notice">           ,     wap.cmread.com      (  :            )string>

    이걸 따라서name=checksign_noticexml에서 이걸 봤어요.
    <public type="string" name="check_sign_notice" id="0x7f0701bf" />

    이를 통해 알 수 있듯이 사실 그의 id는 7f0701bf이다.계속해서 전역적으로 이 id를 검색합니다. 저는 WelcomePageActivity에서 다음과 같은 코드를 발견했습니다. 이 코드는 비교적 중요하기 때문에 우리가 자세히 연구해야 합니다.
        #     setContentView  
        invoke-virtual {p0, v0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->setContentView(Landroid/view/View;)V
    
        #     com.cmread.bplusc.layout.as  a  ,     v0,       
        #v0        
        .line 171
        invoke-static {p0}, Lcom/cmread/bplusc/layout/as;->a(Landroid/content/Context;)Z
    
        move-result v0
        #           
        if-nez v0, :cond_3
        #   WelcomePageActivity E  
        .line 172
        iput-boolean v4, p0, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->E:Z
        #          ,            
        .line 173
        iget-object v0, p0, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->g:Landroid/content/Context;
    
        .line 175
        invoke-virtual {p0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->getResources()Landroid/content/res/Resources;
    
        move-result-object v2
        #               
        const v3, 0x7f0701bf
    
        invoke-virtual {v2, v3}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
    
        move-result-object v2
    
        .line 176
        invoke-virtual {p0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->getResources()Landroid/content/res/Resources;
    
        move-result-object v3
    
        const v4, 0x7f070278
    
        invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
    
        move-result-object v3
    
        .line 177
        invoke-virtual {p0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->getResources()Landroid/content/res/Resources;
    
        move-result-object v4
    
        const v5, 0x7f070156
    
        invoke-virtual {v4, v5}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;
    
        move-result-object v4
    
        new-instance v5, Lcom/cmread/bplusc/bookshelf/hu;
    
        invoke-direct {v5, p0}, Lcom/cmread/bplusc/bookshelf/hu;->(Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;)V
    
        new-instance v6, Lcom/cmread/bplusc/bookshelf/hw;
    
        invoke-direct {v6, p0}, Lcom/cmread/bplusc/bookshelf/hw;->(Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;)V
    
        new-instance v7, Lcom/cmread/bplusc/bookshelf/hx;
    
        invoke-direct {v7, p0}, Lcom/cmread/bplusc/bookshelf/hx;->(Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;)V
    
        .line 173
        invoke-static/range {v0 .. v8}, Lcom/cmread/uilib/dialog/h;->a(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/cmread/uilib/dialog/CommonReaderDialog$a;Lcom/cmread/uilib/dialog/CommonReaderDialog$a;Lcom/cmread/uilib/dialog/CommonReaderDialog$b;Z)Lcom/cmread/uilib/dialog/CommonReaderDialog;
    
        goto/16 :goto_0
    
    
        ......
        ......
        ......
        ......
        ......
        # goto_0        ,            onKeyDown,   return 。
    
        .line 1071
        :cond_0
        :goto_0
        invoke-super {p0, p1, p2}, Lcom/cmread/uilib/activity/CMActivity;->onKeyDown(ILandroid/view/KeyEvent;)Z
    
        move-result v0
    
        :goto_1
        return v0
    

    여기까지, 우리는 이상의 방법을 이해했고, 관건은if-nezv0,:cond 에 있음을 알았다.3, 지금 if-nez를 if-eqz로 바꾸고 다시 포장하여 실행합니다. 그림:
    끝에 쓰다
    모든 것이 철저히 해결되었고 이 글이 시작되는 효과를 보았고 미쿠는 두 가지를 읽고 그의 가방 이름을 바꾸었고 검사도 통과했다.
    나에 관하여
    개인 블로그:MartinHan의 작은 역

    좋은 웹페이지 즐겨찾기