android反编译apk,webview拦截url,替换图⽚资源,重新签名打包apk
反编译apk,webview拦截url,替换图⽚资源,重新签名打包apk
接到⼀个需求:
对游戏中的⼀个图⽚logo进⾏拦截替换
问题点:
项⽬⼯程丢失,只有apk包
解决前准备⼯具:
1.apktool:反编译apk,apk重新打包;
2.Java2smail (android studio插件):将修改的Java代码编译成smail格式;
3.dex2jar:将classes.dex⽂件,反编译出源码(如果apk未加固),反编译出jar包
4.jd-gui:可将jar包转化为java格式查看;
5.jarsigner :将重新打包的apk进⾏签名,如果不签名,⽆法安装使⽤(jarsigner是JDK提供的针对jar包签名的通⽤⼯具,位于
JDK/)。
解决步骤:
⼀.反编译apk,定位修改代码:
开始前,可把apktool路径加⼊环境变量path中,⽅便使⽤,在包含apk的⽬录下开命令窗⼝:
执⾏命令:
apktool d game.apk
执⾏完后获得是smali格式的⽂件,问题来了,怎么定位代码啊,我不会Smali编程语⾔啊
这个时候dex2jar闪亮登场:
将game.apk修改后缀名为zip,解压后得到class.dex⽂件,将获取到的classes.dex复制到解压出来的⼯具dex2jar-0.0.9.15 ⽂件夹内,在dex2jar.bat所在⽬录开命令窗⼝输⼊命令(可能有差异:dex2jar.bat
classes.dex 我的是):
d2j-dex2jar.bat  classes.dex
得到classes_dex2jar.jar⽂件,这个时候,就可以⽤jd-gui打开了
这个步骤的作⽤是⽅便我们定位代码位置,以及修改代码,通过查看代码可知代码中未添加shouldInterceptRequest⽅法,所以我们需要添加代码进⾏拦截;
我们可以看⼀下反编译出来的包的结构:
其中smali⽂件夹中就包含了项⽬代码,但是是 smali格式的,我们要修改也只能从这⾥修改、
由于不会smali语法的书写,所以我们直接通过Android studio 中带的插件Java2smali 将写好java代码⽤插件转换为smali语法,拷贝进来,替换原有smali代码
java代码 :
webview拦截url,替换图⽚
WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
Uri scheme = Uri.parse(s);
return getwebResourceResponse(scheme);
}
public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest) {                Uri scheme = Url();
return getwebResourceResponse(scheme);
android获取真正的签名}
});
private WebResourceResponse getwebResourceResponse(Uri uri) {
WebResourceResponse response = null;
String urlStr = String();
Log.i("checkUrl", urlStr);
if (ains("/XXXX/logo.png")) {
Log.i("checkUrl", "-----------");
try {
InputStream is = getContext().getAssets().open("gamelogo/logo.png");
response = new WebResourceResponse("image/png", "UTF-8", is);
} catch (IOException e) {
e.printStackTrace();
}
}
return response;
}
转化后会⽣成⽂件,在⽣成的smail⽂件提取对应的代码,加⼊到反编译出来的smali代码中(对位置修改添加是关键)
⼆.打包apk,进⾏签名
在上述操作完成后--------其实就是修改反编译出来的⽂件
在该⽬录下开命令窗⼝:
apktool b -f game -o game.apk
你会看到⽣成了⼀个新的apk,尝试安装,你会发现,失败了,因为没有签名,反编译后需要重新签名:
Eclipse或Android Studio在Debug时,对App签名都会使⽤⼀个默认的密钥库:
默认在C:\Users\⽤户名.android\debug.keystore
密钥库名: debug.keystore
密钥别名: androiddebugkey
密钥库密码: android
在 所在路径下把 game.apk拷贝⾄该路径下,开命令窗⼝输⼊命令:
jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA game.apk androiddebugkey
或者你觉得⿇烦就把下⾯的这段代码保存⾄.bat⽂件,然后执⾏即可:
@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
jarsigner -digestalg SHA1 -sigalg SHA1withRSA -keystore <debug.keystore所在路径> -storepass android -keypass android game.apk androiddebugkey pause
然后修改的apk就可以安装了…收⼯
可能有不⾜,后续补充,如有问题,欢迎指出…

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。