① 安卓反編譯後得JS文件全是亂碼
用AXMLPrinter2.jar反編譯xxx.xml文件
解壓xxx.apk,選擇main.xml(選擇其xml文件xml文件都亂碼)復制AXMLPrinter2.jar所目錄通cmd進入AXMLPrinter2.jar所目錄使用命令main.txt反編譯文件現看懂
java -jar AXMLPrinter2.jar main.xml > main.txt
我http://blog.csdn.net/hyz4287010/article/details/7165740 找拷貝
② 微信小程序反編譯沒保存
沒保存就需要重新編寫。
小程序反編譯,如果沒有保存的話是沒有辦法找回的,需要重新編寫才可以。要想拿到微信小程序源碼,先要拿到小程序的包,用反編譯腳本跑一下,微信小程序代碼包里的所有文件、所有資源就出來了(除了project.config.json小程序配置文件)。
操作時需准備工具:1、nodejs環境,這是反編譯腳本的運行環境,下方有地址。2、小程序包解密工具,PC版解包無需模擬器,附件中有這個。3、反編譯腳本下載,附件中有這個。4、微信PC端,運行小程序,自己下載電腦端微信。
③ JS代碼被加密了,如何反編譯 用什麼軟體可以做到
搜索:JS混淆加密壓縮
JS沒有編譯和反編譯
④ js反編譯有誰知道這樣格式的js是做了什麼處理啊怎麼反編譯過來
將特殊符號轉換成一個自己定義的字元串,需要使用的時候再替換回來,你可以試著用replace將&換成一個字元串,比如'_at_',當你需要解析url時候再replace回來
轉義字元的話我沒想好如何做,你如果用這個做出來了可以分享下
⑤ 如何繞過android網路安全配置
Android Nougat(Android 7)引入了一種名叫網路安全配置(Network Security Configuration)的新型安全功能,這種新功能可以允許Android開發者們在無需修改App代碼的情況下自定義他們的網路安全設置。
但是這種功能將有可能影響Android移動端應用的安全測評。如果需要攔截HTTPS流量,那麼就必須安裝代理證書,而且還必須安裝在「用戶證書」之中,而默認情況下這類證書是不被信任的。
接下來,我們將給大家介紹這種新機制的運行模式,以及如何通過重新編譯或運行時鉤子機制來修改這種新型安全機制的默認行為。
開發者如何使用該功能
為了修改默認配置,我們需要在resources目錄中創建一個XML文件來指定自定義配置信息。下面給出的是一份配置文件樣本,代碼給應用程序的所有HTTPS鏈接配置了用戶證書:
<?xml version="1.0"encoding="utf-8"?>
<network-security-config>
<base-config>
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
</trust-anchors>
</base-config>
</network-security-config>
除此之外,該文件還需要在AndroidManifest文件中進行引用,即在application標簽中的android:networkSecurityConfig參數中指定:
<?xml version="1.0"encoding="utf-8"?>
<manifest ... >
<applicationandroid:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
滲透測試人員如何繞過該功能
重新編譯
如果待測試的應用程序運行在Android 7以及更高版本的Android平台中(或者targetSdkVersion鍵配置為版本24或更高),應用程序很可能使用的是默認配置。因此,用戶證書(例如代理CA證書)將不會被應用程序所信任。
一般來說,修改默認配置的方法是在插入了XML內容(激活證書容器)之後再對應用程序進行重新編譯。那麼接下來,我們就要使用apktool來對應用程序進行修改了。
首先,我們要做的就是使用apktool來對應用程序進行反編譯。完成之後,我們還需要在resources目錄中創建一個XML文件並修改AndroidManifest.xml文件中的相關參數(指向網路安全配置文件)。此時,我們就可以再次使用apktool來對應用程序進行重新編譯,然後使用jarsigner工具來對生成的APK文件簽名。
當我們使用任意證書完成對APK文件的重新簽名後,我們就可以使用adb來將其安裝到手機之中了。如果手機經過配置後可以通過中間代理(例如Burp Suite)來發送流量,那麼只要手機系統中安裝了CA證書,我們就可以攔截HTTPS流量了。
運行時鉤子
但是在某些情況下,剛才所介紹的方法也許是不可行的。比如說,如果應用程序使用了shareId來跟其他應用程序共享同一ID,而我們又需要直接訪問其數據的話,那麼這兩個應用程序必須使用同一份證書來進行簽名。如果應用程序經過了重新編譯和重新簽名之後,那這個保護功能也就多餘了,而且我們也不可能再使用開發者之前的初始證書來對修改後的APK進行簽名。
對於這種場景,我們就可以使用動態構造技術了,因為這種方法可以允許我們在運行時對程序的行為進行修改而無須修改應用程序的代碼。為了實現這種操作,我們需要創建一個Frida腳本來調整應用程序(目標SDK版本>=24)網路安全配置的默認行為。
android.security.net.config包實現了網路安全配置模塊,其主類ManifestConfigSource可以載入XML文件中自定義的配置信息,如果resources文件不存在的話,它將會載入默認配置。相關代碼如下所示:
package android.security.net.config;
public class ConfigSource {
. . .
private ConfigSource getConfigSource() { synchronized (mLock) {
. . .
if (mConfigResourceId != 0) {
. . .
source = newXmlConfigSource(mContext, mConfigResourceId, debugBuild, mTargetSdkVersion,mTargetSandboxVesrsion);
} else {
. . .
source = new DefaultConfigSource(usesCleartextTraffic,mTargetSdkVersion, mTargetSandboxVesrsion);
}
mConfigSource = source; return mConfigSource;
}
}
. . .
}
DefaultConfigSource類是ManifestConfigSource類中定義的一個私類,如果沒有使用XML文件來修改配置信息的話,系統將會默認使用這個類:
package android.security.net.config;
public class ConfigSource {
...
private static final class DefaultConfigSource implements ConfigSource { private final NetworkSecurityConfig mDefaultConfig; public DefaultConfigSource(boolean usesCleartextTraffic, inttargetSdkVersion, int targetSandboxVesrsion) {
mDefaultConfig =NetworkSecurityConfig.getDefaultBuilder(targetSdkVersion,
targetSandboxVesrsion)
.setCleartextTrafficPermitted(usesCleartextTraffic)
.build();
} @Override
public NetworkSecurityConfig getDefaultConfig() { return mDefaultConfig;
} @Override
public Set<Pair<Domain, NetworkSecurityConfig>>getPerDomainConfigs() { return null;
}
}
}
請大家看看這個類的構造器,它可以接收三個參數,其中一個就是應用程序的目標SDK版本。這個值可以使用getDefaultBuilder()方法來構造NetworkSecurityConfig類。在最後一段代碼中,如果targetSdkVersion的值小於或等於23(Android Marshmallow,即Android 6.0),代碼將會載入用戶證書。
package android.security.net.config;
public final class NetworkSecurityConfig {
...
public static final Builder getDefaultBuilder(int targetSdkVersion, inttargetSandboxVesrsion) {
Builder builder = new Builder()
.setHstsEnforced(DEFAULT_HSTS_ENFORCED) // System certificatestore, does not bypass static pins.
.addCertificatesEntryRef(
newCertificatesEntryRef(SystemCertificateSource.getInstance(), false)); final = targetSandboxVesrsion < 2;
builder.setCleartextTrafficPermitted(cleartextTrafficPermitted); // Applications targeting N andabove must opt in into trusting the user added certificate
// store.
if (targetSdkVersion <=Build.VERSION_CODES.M) { // User certificate store,does not bypass static pins.
builder.addCertificatesEntryRef(
newCertificatesEntryRef(UserCertificateSource.getInstance(), false));
} return builder;
}
...
接下來,我們需要使用一個Frida腳本來掛鉤DefaultConfigSource類的構造器,並修改其中的targetSdkVersion值。除此之外,這個腳本還需要掛鉤getDefaultBuilder()方法來確保這個值已經被成功修改了。
Java.perform(function(){
var ANDROID_VERSION_M = 23;
var DefaultConfigSource =Java.use("android.security.net.config.ManifestConfigSource$DefaultConfigSource");
var NetworkSecurityConfig = Java.use("android.security.net.config.NetworkSecurityConfig");
DefaultConfigSource.$init.overload("boolean","int").implementation = function(usesCleartextTraffic,targetSdkVersion){
console.log("[+] Modifying DefaultConfigSource constructor"); return this.$init.overload("boolean","int").call(this, usesCleartextTraffic, ANDROID_VERSION_M);
};
DefaultConfigSource.$init.overload("boolean", "int","int").implementation = function(usesCleartextTraffic,targetSdkVersion, targetSandboxVersion){
console.log("[+]Modifying DefaultConfigSource constructor"); return this.$init.overload("boolean", "int","int").call(this, usesCleartextTraffic, ANDROID_VERSION_M,targetSandboxVersion);
};
NetworkSecurityConfig.getDefaultBuilder.overload("int").implementation= function(targetSdkVersion){
console.log("[+] getDefaultBuilder original targetSdkVersion =>" + targetSdkVersion.toString()); return this.getDefaultBuilder.overload("int").call(this, ANDROID_VERSION_M);
};
NetworkSecurityConfig.getDefaultBuilder.overload("int","int").implementation = function(targetSdkVersion,targetSandboxVersion){
console.log("[+] getDefaultBuilder original targetSdkVersion =>" + targetSdkVersion.toString()); return this.getDefaultBuilder.overload("int","int").call(this, ANDROID_VERSION_M, targetSandboxVersion);
};
});
現在,在上面給出的Frida腳本的幫助下,我們可以使用類似Burp Suite之類的HTTP代理來攔截應用程序(所有目標SDK版本>=24的應用程序)的網路流量。
$ frida -U -l ntc.js -f<package_name> --no-pause