re過腳本
1,我們首先在手機上安裝.apk(這是必需的!您必須使用google服務進行安裝!)。.apk和.apk是可選安裝,主要取決於個人需求,需要使用聯系人和日歷同步的進行安裝,沒有安裝也可以。
2,接掘賣扒下配逗來,當涉及到主要事件時,如果要使用GoogleStore,則必須安裝GooglePlay!首先將googleplay.apk安裝到手機內存中,安裝後即可使用googleplay的各種功能,輸入賬號和密碼,一切正常。但立即發現在GooglePlay中搜索或查看該應用程序是正常的,但是一旦您下載該應用程序,它就會閃回!
3,解決這個問題,那就是安裝googleplay.apk,不用擔心運行,然後再安裝一個RE文件瀏覽器,如果判昌安裝了,那更好嗎?
4,將com.android.vending-1.apk復制到手機內存的data/app目錄中,即已安裝的googleplay到system/app目錄中。
5,重新啟動手機即可。
② re從零開始的反編譯教程
寫在開頭,引用很喜歡的一句話: 要麼學!要麼不學!學和不學之間沒有中間值 不學就放棄,學就要去認真的學! --致選擇
為了回溯編譯過程(或對程序進行逆向工程),我們使用各種工具來撤銷匯編和編譯過程,這些工具就叫反匯編器和反編譯器。反匯編器撤銷匯編過程,因此我們可以得到匯編語言形式的輸出結果。反編譯器則以匯編語言甚至是機器語言為輸入,其輸出結果為高級語言。
數組的表示方式是:在基本類型前加上前中括弧「[」,例如int數組和float數組分別表示為:[I、[F;對象的表示則以L作為開頭,格式是 LpackageName/objectName;
(注意必須有個分號跟在最後),例如String對象在smali中為: Ljava/lang/String; ,其中 java/lang 對應 java.lang 包,String就是定義在該包中的一個對象。或許有人問,既然類是用 LpackageName/objectName; 來表示,那類裡面的內部類又如何在smali中引用呢?
答案是:在 LpackageName/objectName/subObjectName 的 subObjectName 前加 $ 符號。
方法的定義一般為: Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type
注意參數與參數之間沒有任何分隔符,同樣舉幾個例子就容易明白
無序列表的使用,在符號"-"後加空格使用。如下:
https://www.jianshu.com/p/1c54c1ccf5cc
https://www.cnblogs.com/onelikeone/p/7594177.html
解決:點擊進去jd-gui,刪除試一試。再不行換最新版本
解析結束後進行編譯報錯
解決方法: https://blog.csdn.net/fuchaosz/article/details/104800802
Failed parse ring installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompress
解決方法:
降低gradle里版本,若出現
signatures do not match the previously installed version; ,
使用adb install命令在手機上安裝app時,遇到這個報錯。原因是新裝的app和手機上現有的舊版app沖突了。
解決方法:刪除手機上原來的app,再重新安裝即可。
可是轉念一想如果反編譯的apk都是Version 30 R+以上,難道我解壓後挨個改一遍gradle?太徹淡了,一定有解決方法,所以有了下面探究出現這個問題的解決方法:既然報錯是資源文件高版本不支持,而且沒有4位對齊,那麼不編譯資源文件就好了
APK簽名工具之jarsigner和apksigner:
https://blog.csdn.net/xzytl60937234/article/details/89088215?utm_medium=distribute.pc_relevant.none-task-blog-js_landingword-1&spm=1001.2101.3001.4242
利用apktool反編譯apk,並且重新簽名打包:
https://blog.csdn.net/qq_21007661/article/details/109851522?utm_medium=distribute.pc_relevant.none-task-blog-js_title-4&spm=1001.2101.3001.4242
驗證apktool能否使用
apktool -r d apk名字.apk,不反編譯資源文件,為什麼這么做,先挖個坑
錯誤提示沒有4位對齊和不支持30版本以上的資源文件。所有嘗試不編譯資源文件
解決4位對齊的方法:
查看當前目錄,生成了新文件:abc.keystor
使用JarSigner對apk進行簽名,命令如下
jarsigner -verbose -keystore abc.keystore -signedjar testx.apk src.apk abc.keystore
直接反編譯的apk產生上述錯誤
但是只編譯資源文件的apk安裝時
發現沒有使用V2進行簽名,這時候進行V2簽名, (apksigner,默認同時使用V1和V2簽名 )
所以先對只編譯資源文件的apk進行V2嘗試看能否成功
重復1(進行apktool -r d apk名字.apk)-->2 -->3 -->4( 不使用jarsigner而使用apksigner )
將生成的abc.keystore和打包回的apk( apktoolapp-debugdist 里的app-debug.apk)放入 C:Users aowei.lianAppDataLocalAndroidSdkuild-tools30.0.3 下,因為Android studio的SDK下有apksigner.bat.
對jarsigner只是apk進行了V1簽名;在Android7.0引入了V2簽名,因此,當進入sdk25.0.0及後續版本,會發現一個apksigner.bat執行腳本。
我們可以通過apksigner進行V2簽名,當然,apksigner默認是同時支持V1與V2的,於是:
學習了公鑰和密鑰的使用和區別,使用私鑰的加密演算法稱為對稱加密演算法,這種演算法實現是接收方和發送方公用一道密鑰,優點是效率高,缺點是安全性差,如果被第三人得知密鑰則信息泄露,由此衍生了公鑰加密演算法,也就是非對稱加密演算法,這個演算法是接收方給發送方公鑰,發送方用公鑰加密後發給接收方,接受方再用私鑰解密。這樣即使所有人知道公鑰也不會造成信息泄露。缺點是效率非常低。
此外了解了RSA簽名的大致過程,發送方擁有公鑰和私鑰,對信息進行摘要然後把摘要通過密鑰進行簽名,然後把簽名和信息一起發出去,那麼如何驗證該信息就是發送方發出的呢,這時候就使用到了公鑰驗證,通過公鑰對信息進行解簽,然後使用一樣的摘要演算法得到摘要,如果得到的摘要和解簽後的內容一致則說明是發送方發出。
總結就是公鑰加密,私鑰解密。公鑰驗證,私鑰簽名
RSA 密碼體制是一種公鑰密碼體制,公鑰公開,私鑰保密,它的加密解密演算法是公開的。由公鑰加密的內容可以並且只能由私鑰進行解密,而由私鑰加密的內容可以並且只能由公鑰進行解密。也就是說,RSA 的這一對公鑰、私鑰都可以用來加密和解密,並且一方加密的內容可以由並且只能由對方進行解密。
因為公鑰是公開的,任何公鑰持有者都可以將想要發送給私鑰持有者的信息進行加密後發送,而這個信息只有私鑰持有者才能解密。
它和加密有什麼區別呢?因為公鑰是公開的,所以任何持有公鑰的人都能解密私鑰加密過的密文,所以這個過程並不能保證消息的安全性,但是它卻能保證消息來源的准確性和不可否認性,也就是說,如果使用公鑰能正常解密某一個密文,那麼就能證明這段密文一定是由私鑰持有者發布的,而不是其他第三方發布的,並且私鑰持有者不能否認他曾經發布過該消息。故此將該過程稱為「簽名」。
Android 簽名機制 v1、v2、v3
進入JDK/bin, 輸入命令
參數:
進入Android SDK/build-tools/SDK版本, 輸入命令
參數:
例如:
最後安裝加 -t :
附上參考鏈接:
https://blog.csdn.net/A807296772/article/details/102298970
配置NDK的時候如果按鈕是灰色的,手動配置
直接在javac後面指定編碼是UTF-8就是了。
需要注意的是要加上* -classpath .其中classpath後面的一個黑點是不能省略的。
編譯好後如何導入so庫
成功運行後發現lib目錄下已經apk編進去so了
https://www.52pojie.cn/thread-732298-1-1.html
本節所有到的工具和Demo
IDA
鏈接: https://pan..com/s/15uCX8o6tTSSelgG_RN7kBQ
Demo
鏈接: https://pan..com/s/1vKC1SevvHfeI7f0d2c6IqQ
找到so並打開它 因為我的機型是支持arm的所以我這里打開的是armeabi文件夾下的so 如果機型是x86模式的那麼這里要打開x86模式下的libJniTest.so
編譯過程:
按住鍵盤組合鍵 shift + f12 打開字元串窗口 這個窗口將會列舉出so中所包含的所有字元串 因為上節課我們只編寫了一個字元串 所以這里只有一個hello 52pojie! 如果打開的是x86的so這里還會有一些.so 但是字元串只有這一個
滑鼠點在hello 52pojie!字元串上,打開 Hex mp窗口,修改hello 52pojie!對應內存地址的內容
關於字元對應的16進制可以在網路搜索ascii碼表 找到字元所對應的16進制
因為我要把hello 52pojie!修改成hello world! 是不是只要找到每個字元所對應的hex修改就好了
這里我看到 hello 52pojie!對應的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii碼表上找到world所對應的十六進制是:77 6F 72 6C 64
所以hello world! 對應的十六進制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21
注意編輯的時候游標暫停的位置只有先輸入字母才能更改成功,修改好後 右鍵Apply changes應用
退出後保存
此時已經so修改完畢
大功告成,hello 52pojie! --> hello world!
③ 腳本是什麼腳本怎麼用我是說在游戲里。
游戲腳本就是俗稱:"外掛" 都是利用編程類軟體編寫的。需要有些編程基礎。現在基本都用按鍵精靈。
腳本簡單地說就是一條條的文字命令,這些文字命令是可以看到的(如可以用記事本打開查看、編輯),腳本程序在執行時,是由系統的一個解釋器,將其一條條的翻譯成機器可識別的指令,並按程序順序執行。
因為腳本在執行時多了一道翻譯的過程,所以它比二進製程序執行效率要稍低一些。
腳本通常可以由應用程序臨時調用並執行。
各類腳本被廣泛地應用於網頁設計中,因為腳本不僅可以減小網頁的規模和提高網頁瀏覽速度,而且可以豐富網頁的表現,如動畫、聲音等。舉個最常見的例子,當點擊網頁上的Email地址時能自動調用Outlook Express或Foxmail這類郵箱軟體,就是通過腳本功能來實現的。
也正因為腳本的這些特點,往往被一些別有用心的人所利用。
例如在腳本中加入一些破壞計算機系統的命令,這樣當用戶瀏覽網頁時,一旦調用這類腳本,便會使用戶的系統受到攻擊。
所以用戶應根據對所訪問網頁的信任程度選擇安全等級,特別是對於那些本身內容就非法的網頁,更不要輕易允許使用腳本。
通過"安全設置"對話框,選擇"腳本"選項下的各種設置就可以輕松實現對腳本的禁用和啟用。