├── .gitignore ├── JD-GUI.app └── Contents │ ├── Info.plist │ ├── MacOS │ └── universalJavaApplicationStub.sh │ └── Resources │ ├── Java │ ├── jd-gui-1.4.0.jar │ └── jd-gui.cfg │ └── jd-gui.icns ├── README.md ├── dex2jar ├── d2j-baksmali.sh ├── d2j-dex-recompute-checksum.sh ├── d2j-dex2jar.sh ├── d2j-dex2smali.sh ├── d2j-jar2dex.sh ├── d2j-jar2jasmin.sh ├── d2j-jasmin2jar.sh ├── d2j-smali.sh ├── d2j-std-apk.sh ├── d2j_invoke.sh └── lib │ ├── antlr-runtime-3.5.jar │ ├── asm-debug-all-4.1.jar │ ├── d2j-base-cmd-2.0.jar │ ├── d2j-jasmin-2.0.jar │ ├── d2j-smali-2.0.jar │ ├── dex-ir-2.0.jar │ ├── dex-reader-2.0.jar │ ├── dex-reader-api-2.0.jar │ ├── dex-tools-2.0.jar │ ├── dex-translator-2.0.jar │ ├── dex-writer-2.0.jar │ └── dx-1.7.jar └── dexlooker ├── DexUtil.py ├── DexUtil.pyc ├── __init__.py ├── __pycache__ ├── DexUtil.cpython-35.pyc ├── __init__.cpython-34.pyc └── __init__.cpython-35.pyc ├── dexlooker.py └── dexlooker.pyc /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ -------------------------------------------------------------------------------- /JD-GUI.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion English 6 | CFBundleExecutable universalJavaApplicationStub.sh 7 | CFBundleName JD-GUI 8 | CFBundleGetInfoString JD-GUI version 1.4.0, Copyright 2008-2015 Emmanuel Dupuy 9 | CFBundleIconFile jd-gui.icns 10 | CFBundleIdentifier jd.jd-gui 11 | CFBundleInfoDictionaryVersion 6.0 12 | CFBundlePackageType APPL 13 | CFBundleLongVersionString 1.4.0, Copyright 2008-2015 Emmanuel Dupuy 14 | CFBundleShortVersionString 1.4.0 15 | CSResourcesFileMapped 16 | LSRequiresCarbon 17 | NSHumanReadableCopyright Copyright 2008-2015 Emmanuel Dupuy 18 | NSPrincipalClass NSApplication 19 | NSHighResolutionCapable 20 | CFBundleDocumentTypes 21 | 22 | 23 | CFBundleTypeExtensions 24 | 25 | class 26 | 27 | CFBundleTypeRole Viewer 28 | CFBundleTypeName Class File 29 | LSIsAppleDefaultForType 30 | LSTypeIsPackage 31 | 32 | 33 | CFBundleTypeExtensions 34 | 35 | java 36 | 37 | CFBundleTypeRole Viewer 38 | CFBundleTypeName Java File 39 | LSIsAppleDefaultForType 40 | LSTypeIsPackage 41 | 42 | 43 | CFBundleTypeExtensions 44 | 45 | jar 46 | 47 | CFBundleTypeName Jar File 48 | CFBundleTypeRole Viewer 49 | LSIsAppleDefaultForType 50 | LSTypeIsPackage 51 | 52 | 53 | CFBundleTypeExtensions 54 | 55 | war 56 | 57 | CFBundleTypeName War File 58 | CFBundleTypeRole Viewer 59 | LSIsAppleDefaultForType 60 | LSTypeIsPackage 61 | 62 | 63 | CFBundleTypeExtensions 64 | 65 | ear 66 | 67 | CFBundleTypeName Ear File 68 | CFBundleTypeRole Viewer 69 | LSIsAppleDefaultForType 70 | LSTypeIsPackage 71 | 72 | 73 | CFBundleTypeExtensions 74 | 75 | zip 76 | 77 | CFBundleTypeName Zip File 78 | CFBundleTypeRole Viewer 79 | LSIsAppleDefaultForType 80 | LSTypeIsPackage 81 | 82 | 83 | CFBundleTypeExtensions 84 | 85 | log 86 | txt 87 | 88 | CFBundleTypeName Log File 89 | CFBundleTypeRole Viewer 90 | LSIsAppleDefaultForType 91 | LSTypeIsPackage 92 | 93 | 94 | JavaX 95 | 96 | MainClass org.jd.gui.OsxApp 97 | JVMVersion 1.7+ 98 | ClassPath $JAVAROOT/jd-gui-1.4.0.jar 99 | WorkingDirectory $JAVAROOT 100 | Properties 101 | 102 | apple.laf.useScreenMenuBar 103 | true 104 | 105 | VMOptions -Xms512m 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /JD-GUI.app/Contents/MacOS/universalJavaApplicationStub.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################################################## 3 | # # 4 | # universalJavaApplicationStub # 5 | # # 6 | # # 7 | # A shellscript JavaApplicationStub for Java Apps on Mac OS X # 8 | # that works with both Apple's and Oracle's plist format. # 9 | # # 10 | # Inspired by Ian Roberts stackoverflow answer # 11 | # at http://stackoverflow.com/a/17546508/1128689 # 12 | # # 13 | # # 14 | # @author Tobias Fischer # 15 | # @url https://github.com/tofi86/universalJavaApplicationStub # 16 | # @date 2015-05-15 # 17 | # @version 0.9.0 # 18 | # # 19 | # # 20 | ################################################################################## 21 | # # 22 | # # 23 | # The MIT License (MIT) # 24 | # # 25 | # Copyright (c) 2015 Tobias Fischer # 26 | # # 27 | # Permission is hereby granted, free of charge, to any person obtaining a copy # 28 | # of this software and associated documentation files (the "Software"), to deal # 29 | # in the Software without restriction, including without limitation the rights # 30 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # 31 | # copies of the Software, and to permit persons to whom the Software is # 32 | # furnished to do so, subject to the following conditions: # 33 | # # 34 | # The above copyright notice and this permission notice shall be included in all # 35 | # copies or substantial portions of the Software. # 36 | # # 37 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # 38 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # 39 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # 40 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # 41 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # 42 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # 43 | # SOFTWARE. # 44 | # # 45 | ################################################################################## 46 | 47 | 48 | 49 | 50 | # 51 | # resolve symlinks 52 | ##################### 53 | 54 | PRG=$0 55 | 56 | while [ -h "$PRG" ]; do 57 | ls=`ls -ld "$PRG"` 58 | link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null` 59 | if expr "$link" : '^/' 2> /dev/null >/dev/null; then 60 | PRG="$link" 61 | else 62 | PRG="`dirname "$PRG"`/$link" 63 | fi 64 | done 65 | 66 | # set the directory abspath of the current shell script 67 | PROGDIR=`dirname "$PRG"` 68 | 69 | 70 | 71 | 72 | # 73 | # set files and folders 74 | ############################################ 75 | 76 | # the absolute path of the app package 77 | cd "$PROGDIR"/../../ 78 | AppPackageFolder=`pwd` 79 | 80 | # the base path of the app package 81 | cd .. 82 | AppPackageRoot=`pwd` 83 | 84 | # set Apple's Java folder 85 | AppleJavaFolder="${AppPackageFolder}"/Contents/Resources/Java 86 | 87 | # set Apple's Resources folder 88 | AppleResourcesFolder="${AppPackageFolder}"/Contents/Resources 89 | 90 | # set Oracle's Java folder 91 | OracleJavaFolder="${AppPackageFolder}"/Contents/Java 92 | 93 | # set Oracle's Resources folder 94 | OracleResourcesFolder="${AppPackageFolder}"/Contents/Resources 95 | 96 | # set path to Info.plist in bundle 97 | InfoPlistFile="${AppPackageFolder}"/Contents/Info.plist 98 | 99 | # set the default JVM Version to a null string 100 | JVMVersion="" 101 | 102 | 103 | 104 | # 105 | # read Info.plist and extract JVM options 106 | ############################################ 107 | 108 | 109 | # read the program name from CFBundleName 110 | CFBundleName=`/usr/libexec/PlistBuddy -c "print :CFBundleName" "${InfoPlistFile}"` 111 | 112 | # read the icon file name 113 | CFBundleIconFile=`/usr/libexec/PlistBuddy -c "print :CFBundleIconFile" "${InfoPlistFile}"` 114 | 115 | 116 | # check Info.plist for Apple style Java keys -> if key :Java is present, parse in apple mode 117 | /usr/libexec/PlistBuddy -c "print :Java" "${InfoPlistFile}" > /dev/null 2>&1 118 | exitcode=$? 119 | JavaKey=":Java" 120 | 121 | # if no :Java key is present, check Info.plist for universalJavaApplication style JavaX keys -> if key :JavaX is present, parse in apple mode 122 | if [ $exitcode -ne 0 ]; then 123 | /usr/libexec/PlistBuddy -c "print :JavaX" "${InfoPlistFile}" > /dev/null 2>&1 124 | exitcode=$? 125 | JavaKey=":JavaX" 126 | fi 127 | 128 | 129 | # read Info.plist in Apple style if exit code returns 0 (true, :Java key is present) 130 | if [ $exitcode -eq 0 ]; then 131 | 132 | # set Java and Resources folder 133 | JavaFolder="${AppleJavaFolder}" 134 | ResourcesFolder="${AppleResourcesFolder}" 135 | 136 | APP_PACKAGE="${AppPackageFolder}" 137 | JAVAROOT="${AppleJavaFolder}" 138 | USER_HOME="$HOME" 139 | 140 | 141 | # read the Java WorkingDirectory 142 | JVMWorkDir=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:WorkingDirectory" "${InfoPlistFile}" 2> /dev/null | xargs` 143 | 144 | # set Working Directory based upon Plist info 145 | if [[ ! -z ${JVMWorkDir} ]]; then 146 | WorkingDirectory="${JVMWorkDir}" 147 | else 148 | # AppPackageRoot is the standard WorkingDirectory when the script is started 149 | WorkingDirectory="${AppPackageRoot}" 150 | fi 151 | 152 | # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME 153 | WorkingDirectory=`eval "echo ${WorkingDirectory}"` 154 | 155 | 156 | # read the MainClass name 157 | JVMMainClass=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:MainClass" "${InfoPlistFile}" 2> /dev/null` 158 | 159 | # read the JVM Options 160 | JVMOptions=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:Properties" "${InfoPlistFile}" 2> /dev/null | grep " =" | sed 's/^ */-D/g' | tr '\n' ' ' | sed 's/ */ /g' | sed 's/ = /=/g' | xargs` 161 | 162 | # read StartOnMainThread 163 | JVMStartOnMainThread=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:StartOnMainThread" "${InfoPlistFile}" 2> /dev/null` 164 | if [ "${JVMStartOnMainThread}" == "true" ]; then 165 | echo ${JVMStartOnMainThread} > ~/Desktop/test.txt 166 | JVMOptions+=" -XstartOnFirstThread" 167 | fi 168 | 169 | # read the ClassPath in either Array or String style 170 | JVMClassPath_RAW=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:ClassPath" "${InfoPlistFile}" 2> /dev/null` 171 | if [[ $JVMClassPath_RAW == *Array* ]] ; then 172 | JVMClassPath=.`/usr/libexec/PlistBuddy -c "print ${JavaKey}:ClassPath" "${InfoPlistFile}" 2> /dev/null | grep " " | sed 's/^ */:/g' | tr -d '\n' | xargs` 173 | else 174 | JVMClassPath=${JVMClassPath_RAW} 175 | fi 176 | # expand variables $APP_PACKAGE, $JAVAROOT, $USER_HOME 177 | JVMClassPath=`eval "echo ${JVMClassPath}"` 178 | 179 | # read the JVM Default Options 180 | JVMDefaultOptions=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:VMOptions" "${InfoPlistFile}" 2> /dev/null | xargs` 181 | 182 | # read the JVM Arguments 183 | JVMArguments=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:Arguments" "${InfoPlistFile}" 2> /dev/null | xargs` 184 | 185 | # read the Java version we want to find 186 | JVMVersion=`/usr/libexec/PlistBuddy -c "print ${JavaKey}:JVMVersion" "${InfoPlistFile}" 2> /dev/null | xargs` 187 | 188 | # read Info.plist in Oracle style 189 | else 190 | 191 | # set Working Directory and Java and Resources folder 192 | JavaFolder="${OracleJavaFolder}" 193 | ResourcesFolder="${OracleResourcesFolder}" 194 | WorkingDirectory="${OracleJavaFolder}" 195 | 196 | APP_ROOT="${AppPackageFolder}" 197 | 198 | # read the MainClass name 199 | JVMMainClass=`/usr/libexec/PlistBuddy -c "print :JVMMainClassName" "${InfoPlistFile}" 2> /dev/null` 200 | 201 | # read the JVM Options 202 | JVMOptions=`/usr/libexec/PlistBuddy -c "print :JVMOptions" "${InfoPlistFile}" 2> /dev/null | grep " -" | tr -d '\n' | sed 's/ */ /g' | xargs` 203 | # replace occurances of $APP_ROOT with it's content 204 | JVMOptions=`eval "echo ${JVMOptions}"` 205 | 206 | JVMClassPath="${JavaFolder}/*" 207 | 208 | # read the JVM Default Options 209 | JVMDefaultOptions=`/usr/libexec/PlistBuddy -c "print :JVMDefaultOptions" "${InfoPlistFile}" 2> /dev/null | grep -o "\-.*" | tr -d '\n' | xargs` 210 | 211 | # read the JVM Arguments 212 | JVMArguments=`/usr/libexec/PlistBuddy -c "print :JVMArguments" "${InfoPlistFile}" 2> /dev/null | tr -d '\n' | sed -E 's/Array \{ *(.*) *\}/\1/g' | sed 's/ */ /g' | xargs` 213 | # replace occurances of $APP_ROOT with it's content 214 | JVMArguments=`eval "echo ${JVMArguments}"` 215 | fi 216 | 217 | 218 | 219 | 220 | # 221 | # find installed Java versions 222 | ################################# 223 | 224 | # first check system variable "$JAVA_HOME" 225 | if [ -n "$JAVA_HOME" ] ; then 226 | JAVACMD="$JAVA_HOME/bin/java" 227 | 228 | # check for specified JVMversion in "/usr/libexec/java_home" symlinks 229 | elif [ ! -z ${JVMVersion} ] && [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then 230 | 231 | if /usr/libexec/java_home -F -v ${JVMVersion}; then 232 | JAVACMD="`/usr/libexec/java_home -F -v ${JVMVersion} 2> /dev/null`/bin/java" 233 | else 234 | # display error message with applescript 235 | osascript -e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'\n\nNo suitable Java version found on your system!\nThis program requires Java ${JVMVersion}\nMake sure you install the required Java version.\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)" 236 | # exit with error 237 | exit 3 238 | fi 239 | 240 | # otherwise check "/usr/libexec/java_home" symlinks 241 | elif [ -x /usr/libexec/java_home ] && /usr/libexec/java_home -F; then 242 | JAVACMD="`/usr/libexec/java_home 2> /dev/null`/bin/java" 243 | 244 | # otherwise check Java standard symlink (old Apple Java) 245 | elif [ -h /Library/Java/Home ]; then 246 | JAVACMD="/Library/Java/Home/bin/java" 247 | 248 | # fallback: public JRE plugin (Oracle Java) 249 | else 250 | JAVACMD="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" 251 | fi 252 | 253 | # fallback fallback: /usr/bin/java 254 | # but this would prompt to install deprecated Apple Java 6 255 | 256 | 257 | 258 | 259 | # 260 | # execute JAVA commandline and do some pre-checks 261 | #################################################### 262 | 263 | # display error message if MainClassName is empty 264 | if [ -z ${JVMMainClass} ]; then 265 | # display error message with applescript 266 | osascript -e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'!\n\n'MainClass' isn't specified!\nJava application cannot be started!\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)" 267 | # exit with error 268 | exit 2 269 | 270 | 271 | # check whether $JAVACMD is a file and executable 272 | elif [ -f "$JAVACMD" ] && [ -x "$JAVACMD" ] ; then 273 | 274 | # enable drag&drop to the dock icon 275 | export CFProcessPath="$0" 276 | 277 | # change to Working Directory based upon Apple/Oracle Plist info 278 | cd "${WorkingDirectory}" 279 | 280 | # execute Java and set 281 | # - classpath 282 | # - dock icon 283 | # - application name 284 | # - JVM options 285 | # - JVM default options 286 | # - main class 287 | # - JVM arguments 288 | exec "$JAVACMD" \ 289 | -cp "${JVMClassPath}" \ 290 | -Xdock:icon="${ResourcesFolder}/${CFBundleIconFile}" \ 291 | -Xdock:name="${CFBundleName}" \ 292 | ${JVMOptions:+$JVMOptions }\ 293 | ${JVMDefaultOptions:+$JVMDefaultOptions }\ 294 | ${JVMMainClass}\ 295 | ${JVMArguments:+ $JVMArguments} 296 | 297 | 298 | else 299 | 300 | # display error message with applescript 301 | osascript -e "tell application \"System Events\" to display dialog \"ERROR launching '${CFBundleName}'!\n\nYou need to have JAVA installed on your Mac!\nVisit http://java.com for more information...\" with title \"${CFBundleName}\" buttons {\" OK \"} default button 1 with icon path to resource \"${CFBundleIconFile}\" in bundle (path to me)" 302 | 303 | # and open java.com 304 | open http://java.com 305 | 306 | # exit with error 307 | exit 1 308 | fi 309 | -------------------------------------------------------------------------------- /JD-GUI.app/Contents/Resources/Java/jd-gui-1.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/JD-GUI.app/Contents/Resources/Java/jd-gui-1.4.0.jar -------------------------------------------------------------------------------- /JD-GUI.app/Contents/Resources/Java/jd-gui.cfg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | true 7 | 8 | system 9 | 10 | 11 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/plugintest-dex2jar.jar 12 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.xiaodian-dex2jar.jar 13 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.profile-dex2jar.jar 14 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.mltrade-dex2jar.jar 15 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.mlssearch-dex2jar.jar 16 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.mlsqrcode-dex2jar.jar 17 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.mainpage-dex2jar.jar 18 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.im-dex2jar.jar 19 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.host-dex2jar.jar 20 | /Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dex2jar/com.meilishuo.detail-dex2jar.jar 21 | 22 | 23 | /Applications/JD-GUI.app/Contents/Resources/Java 24 | /Applications/JD-GUI.app/Contents/Resources/Java 25 | 26 | 27 | 0xFF6666 28 | 29 | -------------------------------------------------------------------------------- /JD-GUI.app/Contents/Resources/jd-gui.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/JD-GUI.app/Contents/Resources/jd-gui.icns -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 集成dex2jar和JD-GUI实现命令行快速反编译查看apk文件 2 | **注意,仅限于类Unix系统(mac,Linux...),需要Python环境支持!** 3 | 4 | ## HOW TO USE 5 | ### 1.下载工程解压并复制到本地任意目录 6 | ### 2.添加本地工程地址到系统环境变量 7 | #### 2.1 打开终端,输入 open -e .bash_profile 8 | #### 2.2 添加本地工程路径至bash_profile文件并保存。例如: 9 | # dexlooker 10 | export PATH=$PATH:/Users/wangxiandeng/Documents/MyCoding/PythonWork/DexLooker/dexlooker 11 | ### 3.现在就可以使用了:在终端输入 dexlooker.py,拖入你的apk文件,将会自动为你反编译apk并打开JD-GUI查看jar文件 12 | 13 | **(喜欢的话给个star哦)** 14 | -------------------------------------------------------------------------------- /dex2jar/d2j-baksmali.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.d2j.smali.BaksmaliCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-dex-recompute-checksum.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.dex2jar.tools.DexRecomputeChecksum" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-dex2jar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.dex2jar.tools.Dex2jarCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-dex2smali.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.d2j.smali.BaksmaliCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-jar2dex.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.dex2jar.tools.Jar2Dex" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-jar2jasmin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.d2j.jasmin.Jar2JasminCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-jasmin2jar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.d2j.jasmin.Jasmin2JarCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-smali.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.d2j.smali.SmaliCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j-std-apk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | # call d2j_invoke.sh to setup java environment 36 | "$PRGDIR/d2j_invoke.sh" "com.googlecode.dex2jar.tools.StdApkCmd" "$@" 37 | -------------------------------------------------------------------------------- /dex2jar/d2j_invoke.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # dex2jar - Tools to work with android .dex and java .class files 5 | # Copyright (c) 2009-2013 Panxiaobo 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # copy from $Tomcat/bin/startup.sh 21 | # resolve links - $0 may be a softlink 22 | PRG="$0" 23 | while [ -h "$PRG" ] ; do 24 | ls=`ls -ld "$PRG"` 25 | link=`expr "$ls" : '.*-> \(.*\)$'` 26 | if expr "$link" : '/.*' > /dev/null; then 27 | PRG="$link" 28 | else 29 | PRG=`dirname "$PRG"`/"$link" 30 | fi 31 | done 32 | PRGDIR=`dirname "$PRG"` 33 | # 34 | 35 | _classpath="." 36 | if [ `uname -a | grep -i -c cygwin` -ne 0 ]; then # Cygwin, translate the path 37 | for k in "$PRGDIR"/lib/*.jar 38 | do 39 | _classpath="${_classpath};`cygpath -w ${k}`" 40 | done 41 | else 42 | for k in "$PRGDIR"/lib/*.jar 43 | do 44 | _classpath="${_classpath}:${k}" 45 | done 46 | fi 47 | 48 | java -Xms512m -Xmx1024m -classpath "${_classpath}" "$@" 49 | -------------------------------------------------------------------------------- /dex2jar/lib/antlr-runtime-3.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/antlr-runtime-3.5.jar -------------------------------------------------------------------------------- /dex2jar/lib/asm-debug-all-4.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/asm-debug-all-4.1.jar -------------------------------------------------------------------------------- /dex2jar/lib/d2j-base-cmd-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/d2j-base-cmd-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/d2j-jasmin-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/d2j-jasmin-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/d2j-smali-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/d2j-smali-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dex-ir-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dex-ir-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dex-reader-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dex-reader-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dex-reader-api-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dex-reader-api-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dex-tools-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dex-tools-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dex-translator-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dex-translator-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dex-writer-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dex-writer-2.0.jar -------------------------------------------------------------------------------- /dex2jar/lib/dx-1.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dex2jar/lib/dx-1.7.jar -------------------------------------------------------------------------------- /dexlooker/DexUtil.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # coding=utf-8 3 | import zipfile 4 | import os 5 | import os.path 6 | import shutil 7 | 8 | ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) 9 | DEX2JAR_DIR = ROOT_DIR + "/dex2jar" 10 | JD_GUI_DIR = ROOT_DIR + "/JD-GUI.app" 11 | 12 | 13 | def run(apk_path): 14 | print("starting...") 15 | unzip_dir = unzip_apk(apk_path) 16 | copy_dir = DEX2JAR_DIR + "/dex/" 17 | mk_and_clean_dir(copy_dir) 18 | copy_dex_to_dir(unzip_dir, copy_dir) 19 | del_all_jar(DEX2JAR_DIR) 20 | dex2jar(DEX2JAR_DIR) 21 | open_all_jar(DEX2JAR_DIR) 22 | 23 | 24 | # 解压apk 25 | def unzip_apk(path): 26 | print("start unzip apk...") 27 | unzip_dir = os.path.splitext(path)[0] 28 | mk_and_clean_dir(unzip_dir) 29 | zipfile.ZipFile(path, "r").extractall(unzip_dir) 30 | print("unzip finish") 31 | return unzip_dir 32 | 33 | 34 | # 复制dex文件到指定目录下 35 | def copy_dex_to_dir(source_dir, target_dir): 36 | print("start copy dex...") 37 | list = os.listdir(source_dir) 38 | for line in list: 39 | filepath = os.path.join(source_dir, line) 40 | if not os.path.isdir(filepath) and filepath.find('.dex') > 0: 41 | shutil.copy(filepath, target_dir) 42 | elif os.path.isdir(filepath): 43 | copy_dex_to_dir(filepath,target_dir) 44 | 45 | print("copy finish") 46 | 47 | 48 | def mk_and_clean_dir(dir): 49 | print("clean " + dir + "...") 50 | if os.path.exists(dir): 51 | shutil.rmtree(dir) 52 | os.mkdir(dir) 53 | print("clean finish") 54 | 55 | 56 | def dex2jar(dex2jar_dir): 57 | print("start dex to jar...") 58 | os.chdir(dex2jar_dir) 59 | 60 | dex_dir = dex2jar_dir + "/dex/" 61 | list = os.listdir(dex_dir) 62 | i = 0 63 | for line in list: 64 | filepath = os.path.join(dex_dir, line) 65 | if not os.path.isdir(filepath) and filepath.find('.dex') > 0: 66 | filename = os.path.basename(filepath) 67 | os.system("./d2j-dex2jar.sh ./dex/" + filename) 68 | os.chdir(ROOT_DIR) 69 | print("dex2jar finish") 70 | 71 | 72 | # 利用JD_GUI 打开jar 73 | def open_all_jar(dir): 74 | print("start open jar...") 75 | list = os.listdir(dir) 76 | for line in list: 77 | filepath = os.path.join(dir, line) 78 | if not os.path.isdir(filepath) and filepath.find('.jar') > 0: 79 | os.system("open -a " + JD_GUI_DIR + " " + filepath) 80 | 81 | 82 | def del_all_jar(dir): 83 | print("start delete jar...") 84 | list = os.listdir(dir) 85 | for line in list: 86 | filepath = os.path.join(dir, line) 87 | if not os.path.isdir(filepath) and filepath.find('.jar') > 0: 88 | os.remove(filepath) 89 | print("delete finish") 90 | -------------------------------------------------------------------------------- /dexlooker/DexUtil.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dexlooker/DexUtil.pyc -------------------------------------------------------------------------------- /dexlooker/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dexlooker/__init__.py -------------------------------------------------------------------------------- /dexlooker/__pycache__/DexUtil.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dexlooker/__pycache__/DexUtil.cpython-35.pyc -------------------------------------------------------------------------------- /dexlooker/__pycache__/__init__.cpython-34.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dexlooker/__pycache__/__init__.cpython-34.pyc -------------------------------------------------------------------------------- /dexlooker/__pycache__/__init__.cpython-35.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dexlooker/__pycache__/__init__.cpython-35.pyc -------------------------------------------------------------------------------- /dexlooker/dexlooker.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | #coding=utf-8 3 | import sys 4 | import os 5 | sys.path.append(sys.path[0]) 6 | import DexUtil as dexutil 7 | 8 | apk_path = sys.argv[1] 9 | os.chdir(sys.path[0]) 10 | dexutil.run(apk_path) 11 | -------------------------------------------------------------------------------- /dexlooker/dexlooker.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HalfStackDeveloper/DexLooker/144986fd23b73ef3540939766102d38b2cf2b6d7/dexlooker/dexlooker.pyc --------------------------------------------------------------------------------