diff --git a/kstools.jar b/kstools.jar index ed27d9d..56e9a5a 100644 Binary files a/kstools.jar and b/kstools.jar differ diff --git a/libs/baksmali.jar b/libs/baksmali.jar index 2ff1ae3..b548bfc 100644 Binary files a/libs/baksmali.jar and b/libs/baksmali.jar differ diff --git a/libs/smali.jar b/libs/smali.jar index 36df92e..2aa9752 100644 Binary files a/libs/smali.jar and b/libs/smali.jar differ diff --git a/libs/version.txt b/libs/version.txt new file mode 100644 index 0000000..09ee912 --- /dev/null +++ b/libs/version.txt @@ -0,0 +1,2 @@ +baksmali-2.5.2.jar +smali-2.5.2.jar diff --git a/src_code/kstools/src/cn/wjdiankong/jw/DoWorkUtils.java b/src_code/kstools/src/cn/wjdiankong/jw/DoWorkUtils.java index 47aa037..2e75bd7 100644 --- a/src_code/kstools/src/cn/wjdiankong/jw/DoWorkUtils.java +++ b/src_code/kstools/src/cn/wjdiankong/jw/DoWorkUtils.java @@ -16,68 +16,68 @@ public class DoWorkUtils { public static ArrayList errorDexList = new ArrayList(); /** - * 获取应用签名信息 + * 鑾峰彇搴旂敤绛惧悕淇℃伅 * @param srcApkFile * @return */ public static boolean getAppSign(File srcApkFile){ try{ long time = System.currentTimeMillis(); - System.out.println("第一步==> 获取apk文件签名信息"); + System.out.println("绗竴姝==> 鑾峰彇apk鏂囦欢绛惧悕淇℃伅"); String sign = ApkSign.getApkSignInfo(srcApkFile.getAbsolutePath()); Const.appSign = sign; System.out.println("signed:"+sign); - System.out.println("获取apk签名信息成功===耗时:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); + System.out.println("鑾峰彇apk绛惧悕淇℃伅鎴愬姛===鑰楁椂:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); return true; }catch(Exception e){ - System.out.println("获取apk签名信息失败,退出!:"+e.toString()); + System.out.println("鑾峰彇apk绛惧悕淇℃伅澶辫触锛岄鍑猴紒:"+e.toString()); return false; } } /** - * 获取应用入口类 + * 鑾峰彇搴旂敤鍏ュ彛绫 */ public static boolean getAppEnter(File srcApkFile){ try{ long time = System.currentTimeMillis(); - System.out.println("第二步==> 获取apk文件入口信息"); + System.out.println("绗簩姝==> 鑾峰彇apk鏂囦欢鍏ュ彛淇℃伅"); String enter = AnalysisApk.getAppEnterApplication(srcApkFile.getAbsolutePath()); Const.entryClassName = enter.replace(".", "/"); - System.out.println("应用入口类:"+enter); - System.out.println("获取apk入口类信息成功===耗时:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); + System.out.println("搴旂敤鍏ュ彛绫:"+enter); + System.out.println("鑾峰彇apk鍏ュ彛绫讳俊鎭垚鍔===鑰楁椂:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); return true; }catch(Exception e){ - System.out.println("获取apk入口类信息失败,退出!:"+e.toString()); + System.out.println("鑾峰彇apk鍏ュ彛绫讳俊鎭け璐ワ紝閫鍑猴紒:"+e.toString()); FileUtils.printException(e); return false; } } /** - * 解压apk + * 瑙e帇apk */ public static boolean zipApkWork(File srcApkFile, String unZipDir){ try { long time = System.currentTimeMillis(); - System.out.println("第三步==> 解压apk文件:"+srcApkFile.getAbsolutePath()); + System.out.println("绗笁姝==> 瑙e帇apk鏂囦欢:"+srcApkFile.getAbsolutePath()); FileUtils.decompressDexFile(srcApkFile.getAbsolutePath(), unZipDir); - System.out.println("解压apk文件结束===耗时:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); + System.out.println("瑙e帇apk鏂囦欢缁撴潫===鑰楁椂:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); return true; } catch (Throwable e) { - System.out.println("解压apk文件失败,退出!:"+e.toString()); + System.out.println("瑙e帇apk鏂囦欢澶辫触锛岄鍑猴紒:"+e.toString()); return false; } } /** - * 删除签名文件 + * 鍒犻櫎绛惧悕鏂囦欢 */ public static boolean deleteMetaInf(String unZipDir, String aaptCmdDir, String srcApkPath){ try{ long time = System.currentTimeMillis(); File metaFile = new File(unZipDir + Const.METAINFO); - System.out.println("第四步==> 删除签名文件"); + System.out.println("绗洓姝==> 鍒犻櫎绛惧悕鏂囦欢"); if(metaFile.exists()){ File[] metaFileList = metaFile.listFiles(); File aaptFile = new File(aaptCmdDir); @@ -85,19 +85,19 @@ public static boolean deleteMetaInf(String unZipDir, String aaptCmdDir, String s for(File f : metaFileList){ cmd = cmd + " " + Const.METAINFO + f.getName(); } - System.out.println("删除签名文件命令:"+cmd); + System.out.println("鍒犻櫎绛惧悕鏂囦欢鍛戒护:"+cmd); execCmd(cmd, true); } - System.out.println("删除签名文件结束===耗时:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); + System.out.println("鍒犻櫎绛惧悕鏂囦欢缁撴潫===鑰楁椂:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); return true; }catch(Throwable e){ - System.out.println("删除签名文件失败,退出!:"+e.toString()); + System.out.println("鍒犻櫎绛惧悕鏂囦欢澶辫触锛岄鍑猴紒:"+e.toString()); return false; } } /** - * 将dex转化成smali + * 灏哾ex杞寲鎴恠mali */ public static boolean dexToSmali(String dexFile, String smaliDir){ File smaliDirF = new File(smaliDir); @@ -105,29 +105,29 @@ public static boolean dexToSmali(String dexFile, String smaliDir){ smaliDirF.delete(); } smaliDirF.mkdirs(); - System.out.println("第五步==> 将dex转化成smali"); - String javaCmd = "java -jar libs"+File.separator+"baksmali.jar -o "+smaliDir + " " + dexFile; + System.out.println("绗簲姝==> 灏哾ex杞寲鎴恠mali"); + String javaCmd = "java -jar libs"+File.separator+"baksmali.jar disassemble "+dexFile + " " + "-o" + " " + smaliDir; long startTime = System.currentTimeMillis(); try { Process pro = Runtime.getRuntime().exec(javaCmd); int status = pro.waitFor(); if(status == 0){ - System.out.println("dex转化smali成功===耗时:"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); + System.out.println("dex杞寲smali鎴愬姛===鑰楁椂:"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); return true; } - System.out.println("dex转化smali失败,status:"+status); + System.out.println("dex杞寲smali澶辫触,status:"+status); return false; } catch (Exception e) { - System.out.println("dex转化smali失败:"+e.toString()); + System.out.println("dex杞寲smali澶辫触:"+e.toString()); return false; } } /** - * 替换原始签名和包名 + * 鏇挎崲鍘熷绛惧悕鍜屽寘鍚 */ public static boolean setSignAndPkgName(){ - System.out.println("第六步==> 代码中替换原始签名和包名信息"); + System.out.println("绗叚姝==> 浠g爜涓浛鎹㈠師濮嬬鍚嶅拰鍖呭悕淇℃伅"); File pmsSmaliDirF = new File(JWMain.rootPath + Const.smaliTmpDir + File.separator + Const.pmsSmaliDir); if(!pmsSmaliDirF.exists()){ pmsSmaliDirF.mkdirs(); @@ -156,10 +156,10 @@ public static boolean setSignAndPkgName(){ writer.write(str+"\n"); } } - System.out.println("设置签名和包名成功===耗时:"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); + System.out.println("璁剧疆绛惧悕鍜屽寘鍚嶆垚鍔===鑰楁椂:"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); return true; }catch(Exception e){ - System.out.println("设置签名和包名失败:"+e.toString()); + System.out.println("璁剧疆绛惧悕鍜屽寘鍚嶅け璐:"+e.toString()); }finally{ if(reader != null){ try{ @@ -184,10 +184,10 @@ public static boolean setSignAndPkgName(){ } /** - * 插入hook代码 + * 鎻掑叆hook浠g爜 */ public static boolean insertHookCode(){ - System.out.println("第七步==> 添加hook代码"); + System.out.println("绗竷姝==> 娣诲姞hook浠g爜"); long startTime = System.currentTimeMillis(); String enterFile = JWMain.rootPath + Const.smaliTmpDir + File.separator + Const.entryClassName.replace(".", File.separator) + ".smali"; String enterFileTmp = JWMain.rootPath + Const.smaliTmpDir + File.separator + Const.entryClassName.replace(".", File.separator) + "_tmp.smali"; @@ -235,10 +235,10 @@ public static boolean insertHookCode(){ isSucc = true; } } - System.out.println("插入hook代码成功===耗时"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); + System.out.println("鎻掑叆hook浠g爜鎴愬姛===鑰楁椂"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); isWorkSucc = true; }catch(Exception e){ - System.out.println("插入hook代码失败:"+e.toString()); + System.out.println("鎻掑叆hook浠g爜澶辫触:"+e.toString()); }finally{ if(reader != null){ try{ @@ -269,38 +269,38 @@ public static boolean insertHookCode(){ } /** - * 将smali转化成dex + * 灏唖mali杞寲鎴恉ex */ public static boolean smaliToDex(String smaliDir, String dexFile){ - System.out.println("第八步==> 将smali转化成dex"); + System.out.println("绗叓姝==> 灏唖mali杞寲鎴恉ex"); File dexFileF = new File(dexFile); if(dexFileF.exists()){ dexFileF.delete(); } - String javaCmd = "java -jar libs"+File.separator+"smali.jar "+smaliDir + " -o " + dexFile; + String javaCmd = "java -jar libs"+File.separator+"smali.jar assemble "+smaliDir + " -o " + dexFile; long startTime = System.currentTimeMillis(); try { Process pro = Runtime.getRuntime().exec(javaCmd); int status = pro.waitFor(); if(status == 0){ - System.out.println("smali转化dex成功===耗时:"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); + System.out.println("smali杞寲dex鎴愬姛===鑰楁椂:"+((System.currentTimeMillis()-startTime)/1000)+"s\n\n"); return true; } - System.out.println("smali转化dex失败,status:"+status); + System.out.println("smali杞寲dex澶辫触,status:"+status); return false; } catch (Exception e) { - System.out.println("smali转化dex失败:"+e.toString()); + System.out.println("smali杞寲dex澶辫触:"+e.toString()); return false; } } /** - * 使用aapt命令添加dex文件到apk中 + * 浣跨敤aapt鍛戒护娣诲姞dex鏂囦欢鍒癮pk涓 */ public static boolean addDexToApk(String aaptCmdDir, String unZipDir, String srcApkPath){ try{ - System.out.println("第九步==> 将dex文件添加到源apk中"); + System.out.println("绗節姝==> 灏哾ex鏂囦欢娣诲姞鍒版簮apk涓"); long time = System.currentTimeMillis(); File aaptFile = new File(aaptCmdDir); String cmd = aaptFile.getAbsolutePath() + " remove " + new File(srcApkPath).getAbsolutePath(); @@ -313,7 +313,7 @@ public static boolean addDexToApk(String aaptCmdDir, String unZipDir, String src } System.out.println("cmd:"+cmd); if(!execCmd(cmd, true)){ - System.out.println("添加dex文件到apk中失败,退出!"); + System.out.println("娣诲姞dex鏂囦欢鍒癮pk涓け璐ワ紝閫鍑猴紒"); return false; } @@ -325,28 +325,28 @@ public static boolean addDexToApk(String aaptCmdDir, String unZipDir, String src } System.out.println("cmd:"+addCmd); if(!execCmd(addCmd, true)){ - System.out.println("添加dex文件到apk中失败,退出!"); + System.out.println("娣诲姞dex鏂囦欢鍒癮pk涓け璐ワ紝閫鍑猴紒"); return false; } - System.out.println("添加dex文件到apk中结束===耗时:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); + System.out.println("娣诲姞dex鏂囦欢鍒癮pk涓粨鏉===鑰楁椂:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); return true; }catch(Throwable e){ - System.out.println("添加dex文件到apk中失败,退出!:"+e.toString()); + System.out.println("娣诲姞dex鏂囦欢鍒癮pk涓け璐ワ紝閫鍑猴紒:"+e.toString()); return false; } } /** - * 签名apk文件 + * 绛惧悕apk鏂囦欢 */ public static boolean signApk(String srcApkPath, String rootPath){ try{ - System.out.println("第十步==> 开始签名apk文件:"+srcApkPath); + System.out.println("绗崄姝==> 寮濮嬬鍚峚pk鏂囦欢:"+srcApkPath); long time = System.currentTimeMillis(); String keystore = "cyy_game.keystore"; File signFile = new File(rootPath+File.separator+keystore); if(!signFile.exists()){ - System.out.println("签名文件:"+signFile.getAbsolutePath()+" 不存在,需要自己手动签名"); + System.out.println("绛惧悕鏂囦欢:"+signFile.getAbsolutePath()+" 涓嶅瓨鍦紝闇瑕佽嚜宸辨墜鍔ㄧ鍚"); return false; } String storePass = "cyy1888"; @@ -361,28 +361,28 @@ public static boolean signApk(String srcApkPath, String rootPath){ signCmd.append(keystore + " "); signCmd.append("-digestalg SHA1 -sigalg MD5withRSA"); execCmd(signCmd.toString(), false); - System.out.println("签名apk文件结束===耗时:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); + System.out.println("绛惧悕apk鏂囦欢缁撴潫===鑰楁椂:"+((System.currentTimeMillis()-time)/1000)+"s\n\n"); return true; }catch(Throwable e){ - System.out.println("重新签名apk文件失败,退出!:"+e.toString()); + System.out.println("閲嶆柊绛惧悕apk鏂囦欢澶辫触锛岄鍑猴紒:"+e.toString()); return false; } } /** - * 清理删除工作 + * 娓呯悊鍒犻櫎宸ヤ綔 */ public static void deleteTmpFile(String rootPath){ - //删除解压之后的目录 + //鍒犻櫎瑙e帇涔嬪悗鐨勭洰褰 FileUtils.deleteDirectory(rootPath+Const.unZipDir); - //删除smali目录 + //鍒犻櫎smali鐩綍 FileUtils.deleteDirectory(rootPath+Const.smaliTmpDir); - //删除临时dex文件 + //鍒犻櫎涓存椂dex鏂囦欢 FileUtils.deleteFile(rootPath+File.separator+"classes.dex"); } /** - * 执行命令 + * 鎵ц鍛戒护 * @param cmd * @param isOutputLog * @return