分类存档: android

apk逆向

现在apk加固越来越强了,

除了dex进行加固,连so也一直进行加固,防动态调试及静态分析。

有位大神自己编译了libdvm.so,理论上应该可以将所有的dex进行dump,因为无论在如何加固,最终都会生成完整的dex供系统使用。

https://github.com/zhukunqian/DexExtractor

apk解压后重新打包

因为涉及到对dll的加密,需要对apk解包后,替换加密后的文件,然后重新打包。

解包很简单,apk本身是zip格式。

再重新打包的命令:

jar cvf new_apk.apk -C unpack_apk/ .

打包后进行签名:

jarsigner -digestalg SHA1 -sigalg MD5withRSA -verbose -keystore xxx.keystore 13_LoadLuaLib_4.apk haifi

测试没有问题。

如果有条件这里还可以做更多的事情:

1、和原来的包进行比较,查看是否使用了不相同的证书。(可选)

2、和云测试平台进行接合,生成的包,自动上传云测试平台,生成测试报告。

3、使用monkeyrunner自动进行测试,(实际上云测试平台也是使用的monkeyrunner),生成测试报告。

后续2步很重要,可以避免发出一个有故障的包。

如何检测apk的签名是否正确

apk渠道众多,有的渠道会对签名进行二次签名。

这里就可能出现一个隐患,打出来的包可能因为不小心使用了错误的签名,会导致提交时被渠道打回。

针对这种情况我们可以在每次出包后,使用keytool查看一下签名指纹,指纹相同,签名也一定会相同。

可以做成工具来进行自动检查。

android隐藏标题栏与状态栏

requestWindowFeature(Window.FEATURE_NO_TITLE);    // 隐藏标题栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);  // 隐藏状态栏

上面两行注意要在setContent之前调用。

dialog没有全屏

项目中使用了视频,视频上下都是黑边,所以设置backgroundcolor为黑色,但是最上面有一点一直没有被填充上(黄色部分),写测试发现是视频所在的dialog没有全屏。

最早怀疑是最上面的状态栏的问题,看高度正好和状态栏的高度相同。

但无论如何设置backgroundcolordrawable,padding,margin,layoutparam都无法解决问题,而且输出查看也没问题。

只能采取减少法了,不断删除相应的代码并观察,看看删除到哪里才不出现这个问题。

在删除时,突然发现在有段代码有:

		// this.getWindow().setLayout(screenWidth, screenHeight);

		mButton.setVisibility(View.INVISIBLE);
	}

看上面被注释掉那一行,这段代码在设置了视频了dialog后又重新了window的layout,难道问题出在这里?注释掉果然解决掉了问题。

 

adb devices中看不到设备

1、adb devices中看不到设备。

以前也遇到过这种问题,解决方案是重装安装android use driver,还需要修改里面的android_winusb.inf文件,很是麻烦。

这里找到一个简单的办法:

修改adb_usb.ini

在任务管理器中结束adb命令,再对下面的修改可能产生影响

在模拟器存放的目录<例如:C:\Documents and Settings\Administrator\.android>下找到或新建一个adb_usb.ini文件,同时增加或写入上面设备的0xVID(VID就是上面的VID_后面跟的数字,例如:0x1782),弄好了再使用重新启动android sdk中的adb就能连接上了

2、adb devices中看到设备是offline状态

-.-!!升级一下adb版本即可。

3、小米手机获取root权限。

安装miui开发版本,adb root进入后使用su获得root权限。

android生成的keystore默认密码

好吧,我们一个项目开发人员一不小心使用了默认生成的debug.keystore提交了app,结果线上无法换keystore,我们只好将debug.keystore拿过来用了。

debug.keystore默认密码是 android。