python文件-打包和其他

目录

今日概要:

1.exe打包

1.1 多文件 -D

1.2 单文件 -F

1.3 路径问题

1.3.1 sys.argv

1.3.2 frozen

1.4 关于模块

1.5 pyqt

1.6 图标

2.离线包

2.1 在线环境

2.2 离线环境

3.其他分享

3.1 dlopen

3.2 strstr


今日概要:

  • exe打包

  • 离线包

  • 其他分享

1.exe打包

pip install pyinstaller

注意事项:

  • 支持mac、win(windows建议使用python3.6.8)。

  • 配合虚拟环境打包。

    - 项目crm
    - 环境crm
        - python.exe
        - Scripts
            - pip.exe
            - pyinstaller.exe
        - Lib
            - site-package
                - requests
                - flask
                - pyinstaller
                
                
    >>>激活虚拟环境(pycharm打开终端默认激活)
    >>>环境crm/Scripts/pip.exe install pyinstaller
    >>>cd 项目目录
    >>>环境crm/Scripts/pyinstaller ....

1.1 多文件 -D

pyinstaller  -D  app.py

注意:如果想看程序报错,先打开终端,在输入exe文件的路径即可。

1.2 单文件 -F

pyinstaller -F app.py

pyinstaller  -D  app.py -n  哔哩
pyinstaller  -F app.py  -n 哔哩

1.3 路径问题

  • 多文件打包,不会报错。

  • 单文件打包,报错。

    为什么会报错?加载&解析到临时目录问题。

1.3.1 sys.argv

1.3.2 frozen

import sys
if getattr(sys, 'frozen', False): # True
    print('running in a PyInstaller bundle')
else: # False
    print('running in a normal Python process')
import time
import os
import sys
​
if getattr(sys, 'frozen', False):
    # pyinstaller打开
    BASE_DIR = os.path.dirname(sys.executable)
else:
    # py文件路径
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
​
print("----环境使用xxx系统----")
​
with open(os.path.join(BASE_DIR, "account.txt"), mode='r', encoding='utf-8') as f:
    data = f.read().strip()
print(data)
​
time.sleep(5)

1.4 关于模块

但是,如果遇到那种动态导入模块的代码时,他是无法找到关联的包。

import time
import importlib
​
print("----环境使用xxx系统----")
​
# from utils import card
# card.get_number()
​
card = importlib.import_module("utils.card")
v1 = card.get_number()
print(v1)
​
time.sleep(5)

1.5 pyqt

pyinstaller -F v1.py

默认打包qt程序时,打开的同时会一直出现终端。

如果不想让他出现,那就是在打包时设置一个参数:

pyinstaller -F v1.py -w

1.6 图标

在打包时,加入 -i 参数可以展示图标(内部需要依赖pillow模块将图片转换为icon)

pip install pillow
pyinstaller -F v1.py -w  -i  tt.png

2.离线包

2.1 在线环境

当项目开发完成之后,我们会使用pip freeze将环境中依赖包写入到requirements.txt中。

pip freeze > requirements.txt

后期项目部署时,安装依赖包。

pip install -r requirements.txt

2.2 离线环境

使用pip download将依赖包下载到本地目录。

pip download -d 包文件夹 -r requirements.txt

后期项目部署时,安装依赖包:

pip install wheel
pip install --no-index --find-links=包文件夹 -r requirements.txt

例如:
pip install --no-index --find-links=pkg -r requirements.txt

3.其他分享

识货app,反调试(监测是否用frida)。

一般情况下反调试实现:在so层,内部创建一个线程不断监测设备是否正在被调试(监测frida、xposed等调试时出现的目录、关键字等)。

如果想要绕过调试,可以做如下尝试:

  • 删除相应so文件。

  • hook指定so文件中的线程,让他不要运行监测。

  • hook底层字符串比较方法strstr,如果出现关键字让他跳过(底层肯定会判断是否包含frida等关键字)。

3.1 dlopen

在安卓系统底层是使用dlopenandroid_dlopen_ext加载动态链接库(so文件),所以我们可以hook这俩函数,看看他们底层都加在了哪些so文件。

function showLoadSoFile() {
    var dlopen = Module.findExportByName(null, "dlopen");
    var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext");
​
    Interceptor.attach(dlopen, {
        onEnter: function (args) {
            var path_ptr = args[0];
            var path = ptr(path_ptr).readCString();
            console.log("[dlopen:]", path);
        }, onLeave: function (retval) {
​
        }
    });
​
    Interceptor.attach(android_dlopen_ext, {
        onEnter: function (args) {
            var path_ptr = args[0];
            var path = ptr(path_ptr).readCString();
            console.log("[dlopen_ext:]", path);
        }, onLeave: function (retval) {
​
        }
    });
}
​
showLoadSoFile();
// frida -U -f com.hupu.shihuo -l load_so_file.js
// frida -U -f com.hupu.shihuo -l load_so_file.js --no-pause

得到加载的so文件》

[M2007J17C::com.hupu.shihuo]-> [dlopen_ext:] /system/framework/oat/arm64/org.apache.http.legacy.odex
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/oat/arm64/base.odex
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libldp.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libmmkv.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libdusanwa.so
[dlopen_ext:] /system/framework/oat/arm64/gson.odex
[dlopen_ext:] /data/dalvik-cache/arm64/system@priv-app@RtMiCloudSDK@RtMiCloudSDK.apk@classes.dex
[dlopen_ext:] /data/dalvik-cache/arm64/system@app@MiuiContentCatcher@MiuiContentCatcher.apk@classes.dex
[dlopen_ext:] /data/dalvik-cache/arm64/system@app@CatcherPatch@CatcherPatch.apk@classes.dex
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libsh_security.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libszstone.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libKwAppGuardSDK.so
[dlopen_ext:] /data/dalvik-cache/arm64/product@app@TrichromeLibrary@TrichromeLibrary.apk@classes.dex
[dlopen_ext:] /data/dalvik-cache/arm64/product@app@WebViewGoogle@WebViewGoogle.apk@classes.dex
[dlopen_ext:] libmonochrome.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libsgmainso-5.5.82.so
[dlopen_ext:] /product/app/WebViewGoogle/WebViewGoogle.apk!/lib/arm64-v8a/libmonochrome.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libcrashsdk.so
[dlopen:] libc.so
[dlopen_ext:] /system/lib64/libwebviewchromium_plat_support.so
[dlopen_ext:] /vendor/lib64/hw/gralloc.lito.so
[dlopen_ext:] /vendor/lib64/hw/android.hardware.graphics.mapper@3.0-impl-qti-display.so
[dlopen:] libadreno_app_profiles.so
[dlopen:] libEGL_adreno.so
[dlopen:] libGLESv2_adreno.so
[dlopen:] libGLESv1_CM_adreno.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libumeng-spy.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libBugly.so
[dlopen_ext:] /vendor/lib64/hw/android.hardware.graphics.mapper@3.0-impl-qti-display.so
[dlopen:] libadreno_utils.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libc++_shared.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libbcmarsxlog.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libttlicense2.so
[dlopen:] librs_jni.so
[dlopen_ext:] /vendor/lib64/hw/android.hardware.renderscript@1.0-impl.so
[dlopen:] libRS_internal.so
[dlopen:] libRSDriver_adreno.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libsgsecuritybodyso-5.5.92.so
[dlopen:] libllvm-qcom.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libvideodec.so
[dlopen:] librs_adreno_sha1.so
[dlopen:] /system/lib64/libc.so
[dlopen:] libRSCacheDir.so
[dlopen:] /product/app/WebViewGoogle/WebViewGoogle.apk!/lib/arm64-v8a/libmonochrome.so
[dlopen:] /system/lib64/libc.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libttcrypto.so
[dlopen:] /system/lib64/libc.so
[dlopen:] libc.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libttboringssl.so
[dlopen:] libc.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libvcn.so
[dlopen:] libmediandk.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libvcnverify.so
[dlopen:] libandroid.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libvcnverifylite.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libavmdlbase.so
[dlopen:] libandroid.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libavmdl.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libjsengine-loadso.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libsgmiddletierso-5.5.79.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libvcnverify.so
[dlopen_ext:] /data/user/0/com.hupu.shihuo/app_plugins_lib/libv8uc.so
[dlopen_ext:] /data/user/0/com.hupu.shihuo/app_ucmsdk/updates/1627372867/20362402_0/lib/arm64-v8a/libwebviewuc.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libjsengine-platform.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libjsengine-api.so
[dlopen:] libc.so
[dlopen:] libandroid.so
[dlopen_ext:] /data/user/0/com.hupu.shihuo/app_ucmsdk/updates/1627372867/20362402_0/lib/arm64-v8a/libjsi.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libv8worker-native.so
[dlopen:] libGLESv2.so
[dlopen:] libEGL.so
[dlopen:] libGLESv2_adreno.so
[dlopen:] libGLESv1_CM_adreno.so
[dlopen:] libc.so
[dlopen:] libc.so
[dlopen_ext:] /data/app/com.hupu.shihuo-hA7O7wotAbGFn9QsyVjIBw==/lib/arm64/libmsaoaidsec.so
Process terminated
[M2007J17C::com.hupu.shihuo]->

由于加载了libmsaoaidsec.so,才导致程序终止,所以可以尝试:

  • 删除libmsaoaidsec.so

  • hook系统创建线程的方法,如果是次so文件则不创建线程。

    function hook_pthread_create() {
        var pt_create_func = Module.findExportByName("libc.so", 'pthread_create');
    
        Interceptor.attach(pt_create_func, {
            onEnter: function (args) {
                // 是那个so文件调用我,创建线程
                var so_name = Process.findModuleByAddress(args[2]).name;
                if (so_name.indexOf("libsgmainso") != -1 || so_name.indexOf("libmsaoaidsec") != -1 || so.indexOf("libavmdl") != -1) {
                    
                    try {
                        Interceptor.replace(args[2], new NativeCallback(function () {
                            console.log('replace success');
                            return null;
                        }, 'void', ["void"]));
                    } catch (e) {
    
                    }
                    
                }
            }, onLeave: function (retval) {
            }
        })
    }
    
    hook_pthread_create();
    // frida -U -f com.hupu.shihuo -l hook_so_thread.js --no-pause
    // frida -U -f com.hupu.shihuo -l hook_so_thread.js

3.2 strstr

function replace_str() {
    var pt_strstr = Module.findExportByName("libc.so", 'strstr');
    var pt_strcmp = Module.findExportByName("libc.so", 'strcmp');


    Interceptor.attach(pt_strstr, {
        onEnter: function (args) {
            var str1 = args[0].readCString();
            
            var str2 = args[1].readCString();
            if (str2.indexOf("tmp") !== -1 || str2.indexOf("frida") !== -1 || str2.indexOf("gum-js-loop") !== -1 || str2.indexOf("gmain") !== -1 || str2.indexOf("linjector") !== -1) {
                console.log("strcmp-->", str1, str2);
                this.hook = true;
            }
        }, onLeave: function (retval) {
            if (this.hook) {
                retval.replace(0);
            }
        }
    });


    Interceptor.attach(pt_strcmp, {
        onEnter: function (args) {
            var str1 = args[0].readCString();
            var str2 = args[1].readCString();
            if (str2.indexOf("tmp") !== -1 || str2.indexOf("frida") !== -1 || str2.indexOf("gum-js-loop") !== -1 || str2.indexOf("gmain") !== -1 || str2.indexOf("linjector") !== -1) {
                //console.log("strcmp-->", str1, str2);
                this.hook = true;
            }
        }, onLeave: function (retval) {
            if (this.hook) {
                retval.replace(0);
            }
        }
    })

}

replace_str();
// frida -U -f com.hupu.shihuo -l hook_str.js --no-pause -o v1.txt
// frida -U -f com.hupu.shihuo -l hook_str.js -o v1.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值