首页 > 其他分享 >四期day36 打包和其他

四期day36 打包和其他

时间:2023-06-26 18:13:08浏览次数:39  
标签:day36 app 四期 ext so 打包 shihuo dlopen arm64

day36 打包和其他

今日概要:

  • 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

image-20220412203400525

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

1.2 单文件 -F

pyinstaller -F app.py

image-20220412204046080

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

1.3 路径问题

image-20220412204916312

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

  • 单文件打包,报错。

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

1.3.1 sys.argv

image-20220412210014110

1.3.2 frozen

image-20220412210041666

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 关于模块

image-20220412210843613

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

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)

image-20221103221630065

1.5 pyqt

pyinstaller -F v1.py

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

image-20221103154050690

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

pyinstaller -F v1.py -w

image-20221103154403559

1.6 图标

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

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

image-20221103155006204

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 --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@[email protected]@classes.dex
[dlopen_ext:] /data/dalvik-cache/arm64/system@app@[email protected]@classes.dex
[dlopen_ext:] /data/dalvik-cache/arm64/system@app@[email protected]@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@[email protected]@classes.dex
[dlopen_ext:] /data/dalvik-cache/arm64/product@app@[email protected]@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/[email protected]
[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/[email protected]
[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/[email protected]
[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

标签:day36,app,四期,ext,so,打包,shihuo,dlopen,arm64
From: https://www.cnblogs.com/fuminer/p/17506408.html

相关文章

  • spring boot 编译打包时将自定义引入的.jar包依赖,全部打包进去
    发现自己引入的.jar包,在打包时,.jar包并不会打进去,导致报错。打包时打入自定义.jar包方法:<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</a......
  • webpack打包自动上传到指定目录
    webpack打包生成一个静态目录文件,可以通过webpack将打包的文件移到指定目录文件进行提交,自动化构建上传编写一个webpack插件build.after.jsconstpluginName='ConsoleLogOnBuildWebpackPlugin';letfs=require('fs-extra');constprocess=require('process');const......
  • 用node-webkit把web应用打包成桌面应用
    1.下载node-webkit:https://github.com/nwjs/nw.js=>下载完成后是个压缩包。解压即可。=>看到nw.exe文件,双击运行一下,看是否正常=>exe文件的图标可以用ResourceHacker,nw-builder和node-winresourcer之类的工具替换。 2.项目新建package.json:{  "name":"zqz",//这里......
  • 在PyInstaller中打包Python代码
    在PyInstaller中打包Python代码在实际开发中,我们经常需要将Python代码打包成可独立运行的可执行文件,以便更方便地分享和部署。PyInstaller是一个常用的Python打包工具,可以将Python脚本打包成单个可执行文件。以下是如何使用PyInstaller打包Python代码的步骤:安装PyInstaller,使用......
  • dpkg 解包 重新打包
    1.把包控制脚本解包出来    dpkg-deb -e  nano.deb  nano/DEBIAN2. 把程序解包出来     dpkg-deb -x  nano.deb  nano3.重新打包  dpkg-deb  -b  nano  nano_2.deb    control字段信息说明package:程序名称,中间......
  • 基于深度学习的文本分类6大算法-原理、结构、论文、源码打包分享
    导读:文本分类是NLP领域一项基础工作,在工业界拥有大量且丰富的应用场景。传统的文本分类需要依赖很多词法、句法相关的human-extractedfeature,自2012年深度学习技术快速发展之后,尤其是循环神经网络RNN、卷积神经网络CNN在NLP领域逐渐获得广泛应用,使得传统的文本分类任务变得更加容......
  • GoLang在不同系统打包
    配置Mac下编译Linux,Windows平台的64位可执行程序:goenv-wCGO_ENABLED=0GOOS=linuxGOARCH=amd64goenv-wCGO_ENABLED=0GOOS=windowsGOARCH=amd64Linux下编译Mac,Windows平台的64位可执行程序:goenv-wCGO_ENABLED=0GOOS=darwinGOARCH=amd64goenv-wCGO_E......
  • 将python程序打包为exe可执行文件方法
    将py打包为exe文件需要依赖pyinstaller第三方库-F:打包后只生成单个exe格式文件;-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;-c:默认选项,使用控制台(就是类似cmd的黑框);-w:不使用控制台;-p:添加搜索路径,让其找到对应的库;-i:改变生成程序的icon图标。1.单个py文件编......
  • 使用pyinstaller打包python为exe文件
    将Python图形界面程序打包成可执行文件,可以在没有Python环境的电脑上运行,可以使用PyInstaller或者cx_Freeze等工具。使用PyInstaller打包Python程序首先,在命令行中安装PyInstaller:pipinstallpyinstaller在命令行中进入Python程序所在目录。输入以下命令:pyinstaller--onef......
  • 【干货分享】全套Android学习笔记+最新大厂面试真题合集,打包领取
    笔者是一名普通的软件开发人员,一向不喜欢高高在上或者晦涩难懂的理论。我认为知识的本身也应该是通俗易懂的,用晦涩难懂的东西去描述,是对人类进步的阻碍,是知识垄断。笔者希望此系列教程能够以工程实现为出发点和落脚点,简化理论知识,化繁为简地解析Android相关知识点,为各位读者成长为......