AKP分析(基于取证)

【胖虎的逆向之路】03——Android一代壳脱壳办法罗列&实操 在上文中,我们讲解了关于Android整体加壳的原理和实际操作,现在我们来针对目前主流的脱壳工具以及流程进行讲解,由于作者能力有限,会尽力的详细描述整体壳脱壳提示:以下是本篇文章正文内容,下面案例可供参考本文总结了当下dex整体加壳的常用的一些脱壳方案,并进行复现,但是在这里仅作为实验加深自己的理解为主(目前也不会这么简单的就可以拿到源Dex)但是有兴趣的朋友可以像我一样去把整个流程走一遍,加深自己的理解~ 阅读详情

APP基础

格式:

*.IPA IOS系统的app文件格式

*.APK 安卓系统的app文件格式

APK静态分析

加固(壳):

目的:

防止APK被逆向,防篡改,实现数据保护

种类:

APK加壳的中了非常多,我在取证过程中所见到的加壳种类有UPX和pyintaller的加壳方式

脱壳:

一般我们用雷电挂载APK时可以直接使用雷电自带的脱壳来脱壳之后反编译。但是有些恶意文件不能用雷电来挂载,这个时候我们就要手动查壳

查壳工具:

Detect It Easy3.7(之前老的版本可能查不到pyinstaller这个加壳方式)

PEiD:偶尔用,效果不是很好

当然可以用沙箱的方法看一下他是不是有壳

脱壳工具:

知道是什么壳加固了的话,就可以对症下药了

如果是UPX壳的话就用UPX tool来脱

或者360壳,使用取证工具来脱

如果是pyinstaller壳的话用脚本来脱,将脚本和恶意文件放到一个文件夹下面,用cmd跑,会得到一个文件夹,文件夹里的文件不带pyc后缀,要自己加上,然后这些文件也缺少文件头,还要自己补充

然后可以使用在线pyc反编译

pyc反编译 - 爱资料工具 (toolnb.com)

"""
PyInstaller Extractor v1.9 (Supports pyinstaller 3.3, 3.2, 3.1, 3.0, 2.1, 2.0)
Author : Extreme Coders
E-mail : extremecoders(at)hotmail(dot)com
Web    : https://0xec.blogspot.com
Date   : 29-November-2017
Url    : https://sourceforge.net/projects/pyinstallerextractor/

For any suggestions, leave a comment on
https://forum.tuts4you.com/topic/34455-pyinstaller-extractor/

This script extracts a pyinstaller generated executable file.
Pyinstaller installation is not needed. The script has it all.

For best results, it is recommended to run this script in the
same version of python as was used to create the executable.
This is just to prevent unmarshalling errors(if any) while
extracting the PYZ archive.

Usage : Just copy this script to the directory where your exe resides
        and run the script with the exe file name as a parameter

C:\path\to\exe\>python pyinstxtractor.py <filename>
$ /path/to/exe/python pyinstxtractor.py <filename>

Licensed under GNU General Public License (GPL) v3.
You are free to modify this source.

CHANGELOG
================================================

Version 1.1 (Jan 28, 2014)
-------------------------------------------------
- First Release
- Supports only pyinstaller 2.0

Version 1.2 (Sept 12, 2015)
-------------------------------------------------
- Added support for pyinstaller 2.1 and 3.0 dev
- Cleaned up code
- Script is now more verbose
- Executable extracted within a dedicated sub-directory

(Support for pyinstaller 3.0 dev is experimental)

Version 1.3 (Dec 12, 2015)
-------------------------------------------------
- Added support for pyinstaller 3.0 final
- Script is compatible with both python 2.x & 3.x (Thanks to Moritz Kroll @ Avira Operations GmbH & Co. KG)

Version 1.4 (Jan 19, 2016)
-------------------------------------------------
- Fixed a bug when writing pyc files >= version 3.3 (Thanks to Daniello Alto: https://github.com/Djamana)

Version 1.5 (March 1, 2016)
-------------------------------------------------
- Added support for pyinstaller 3.1 (Thanks to Berwyn Hoyt for reporting)

Version 1.6 (Sept 5, 2016)
-------------------------------------------------
- Added support for pyinstaller 3.2
- Extractor will use a random name while extracting unnamed files.
- For encrypted pyz archives it will dump the contents as is. Previously, the tool would fail.

Version 1.7 (March 13, 2017)
-------------------------------------------------
- Made the script compatible with python 2.6 (Thanks to Ross for reporting)

Version 1.8 (April 28, 2017)
-------------------------------------------------
- Support for sub-directories in .pyz files (Thanks to Moritz Kroll @ Avira Operations GmbH & Co. KG)

Version 1.9 (November 29, 2017)
-------------------------------------------------
- Added support for pyinstaller 3.3
- Display the scripts which are run at entry (Thanks to Michael Gillespie @ malwarehunterteam for the feature request)

"""

from __future__ import print_function
import os
import struct
import marshal
import zlib
import sys
import imp
import types
from uuid import uuid4 as uniquename


class CTOCEntry:
    def __init__(self, position, cmprsdDataSize, uncmprsdDataSize, cmprsFlag, typeCmprsData, name):
        self.position = position
        self.cmprsdDataSize = cmprsdDataSize
        self.uncmprsdDataSize = uncmprsdDataSize
        self.cmprsFlag = cmprsFlag
        self.typeCmprsData = typeCmprsData
        self.name = name


class PyInstArchive:
    PYINST20_COOKIE_SIZE = 24           # For pyinstaller 2.0
    PYINST21_COOKIE_SIZE = 24 + 64      # For pyinstaller 2.1+
    MAGIC = b'MEI\014\013\012\013\016'  # Magic number which identifies pyinstaller

    def __init__(self, path):
        self.filePath = path


    def open(self):
        try:
            self.fPtr = open(self.filePath, 'rb')
            self.fileSize = os.stat(self.filePath).st_size
        except:
            print('[*] Error: Could not open {0}'.format(self.filePath))
            return False
        return True


    def close(self):
        try:
            self.fPtr.close()
        except:
            pass


    def checkFile(self):
        print('[*] Processing {0}'.format(self.filePath))
        # Check if it is a 2.0 archive
        self.fPtr.seek(self.fileSize - self.PYINST20_COOKIE_SIZE, os.SEEK_SET)
        magicFromFile = self.fPtr.read(len(self.MAGIC))

        if magicFromFile == self.MAGIC:
            self.pyinstVer = 20     # pyinstaller 2.0
            print('[*] Pyinstaller version: 2.0')
            return True

        # Check for pyinstaller 2.1+ before bailing out
        self.fPtr.seek(self.fileSize - self.PYINST21_COOKIE_SIZE, os.SEEK_SET)
        magicFromFile = self.fPtr.read(len(self.MAGIC))

        if magicFromFile == self.MAGIC:
            print('[*] Pyinstaller version: 2.1+')
            self.pyinstVer = 21     # pyinstaller 2.1+
            return True

        print('[*] Error : Unsupported pyinstaller version or not a pyinstaller archive')
        return False


    def getCArchiveInfo(self):
        try:
            if self.pyinstVer == 20:
                self.fPtr.seek(self.fileSize - self.PYINST20_COOKIE_SIZE, os.SEEK_SET)

                # Read CArchive cookie
                (magic, lengthofPackage, toc, tocLen, self.pyver) = \
                struct.unpack('!8siiii', self.fPtr.read(self.PYINST20_COOKIE_SIZE))

            elif self.pyinstVer == 21:
                self.fPtr.seek(self.fileSize - self.PYINST21_COOKIE_SIZE, os.SEEK_SET)

                # Read CArchive cookie
                (magic, lengthofPackage, toc, tocLen, self.pyver, pylibname) = \
                struct.unpack('!8siiii64s', self.fPtr.read(self.PYINST21_COOKIE_SIZE))

        except:
            print('[*] Error : The file is not a pyinstaller archive')
            return False

        print('[*] Python version: {0}'.format(self.pyver))

        # Overlay is the data appended at the end of the PE
        self.overlaySize = lengthofPackage
        self.overlayPos = self.fileSize - self.overlaySize
        self.tableOfContentsPos = self.overlayPos + toc
        self.tableOfContentsSize = tocLen

        print('[*] Length of package: {0} bytes'.format(self.overlaySize))
        return True


    def parseTOC(self):
        # Go to the table of contents
        self.fPtr.seek(self.tableOfContentsPos, os.SEEK_SET)

        self.tocList = []
        parsedLen = 0

        # Parse table of contents
        while parsedLen < self.tableOfContentsSize:
            (entrySize, ) = struct.unpack('!i', self.fPtr.read(4))
            nameLen = struct.calcsize('!iiiiBc')

            (entryPos, cmprsdDataSize, uncmprsdDataSize, cmprsFlag, typeCmprsData, name) = \
            struct.unpack( \
                '!iiiBc{0}s'.format(entrySize - nameLen), \
                self.fPtr.read(entrySize - 4))

            name = name.decode('utf-8').rstrip('\0')
            if len(name) == 0:
                name = str(uniquename())
                print('[!] Warning: Found an unamed file in CArchive. Using random name {0}'.format(name))

            self.tocList.append( \
                                CTOCEntry(                      \
                                    self.overlayPos + entryPos, \
                                    cmprsdDataSize,             \
                                    uncmprsdDataSize,           \
                                    cmprsFlag,                  \
                                    typeCmprsData,              \
                                    name                        \
                                ))

            parsedLen += entrySize
        print('[*] Found {0} files in CArchive'.format(len(self.tocList)))



    def extractFiles(self):
        print('[*] Beginning extraction...please standby')
        extractionDir = os.path.join(os.getcwd(), os.path.basename(self.filePath) + '_extracted')

        if not os.path.exists(extractionDir):
            os.mkdir(extractionDir)

        os.chdir(extractionDir)

        for entry in self.tocList:
            basePath = os.path.dirname(entry.name)
            if basePath != '':
                # Check if path exists, create if not
                if not os.path.exists(basePath):
                    os.makedirs(basePath)

            self.fPtr.seek(entry.position, os.SEEK_SET)
            data = self.fPtr.read(entry.cmprsdDataSize)

            if entry.cmprsFlag == 1:
                data = zlib.decompress(data)
                # Malware may tamper with the uncompressed size
                # Comment out the assertion in such a case
                assert len(data) == entry.uncmprsdDataSize # Sanity Check

            with open(entry.name, 'wb') as f:
                f.write(data)

            if entry.typeCmprsData == b's':
                print('[+] Possible entry point: {0}'.format(entry.name))

            elif entry.typeCmprsData == b'z' or entry.typeCmprsData == b'Z':
                self._extractPyz(entry.name)


    def _extractPyz(self, name):
        dirName =  name + '_extracted'
        # Create a directory for the contents of the pyz
        if not os.path.exists(dirName):
            os.mkdir(dirName)

        with open(name, 'rb') as f:
            pyzMagic = f.read(4)
            assert pyzMagic == b'PYZ\0' # Sanity Check

            pycHeader = f.read(4) # Python magic value

            if imp.get_magic() != pycHeader:
                print('[!] Warning: The script is running in a different python version than the one used to build the executable')
                print('    Run this script in Python{0} to prevent extraction errors(if any) during unmarshalling'.format(self.pyver))

            (tocPosition, ) = struct.unpack('!i', f.read(4))
            f.seek(tocPosition, os.SEEK_SET)

            try:
                toc = marshal.load(f)
            except:
                print('[!] Unmarshalling FAILED. Cannot extract {0}. Extracting remaining files.'.format(name))
                return

            print('[*] Found {0} files in PYZ archive'.format(len(toc)))

            # From pyinstaller 3.1+ toc is a list of tuples
            if type(toc) == list:
                toc = dict(toc)

            for key in toc.keys():
                (ispkg, pos, length) = toc[key]
                f.seek(pos, os.SEEK_SET)

                fileName = key
                try:
                    # for Python > 3.3 some keys are bytes object some are str object
                    fileName = key.decode('utf-8')
                except:
                    pass

                # Make sure destination directory exists, ensuring we keep inside dirName
                destName = os.path.join(dirName, fileName.replace("..", "__"))
                destDirName = os.path.dirname(destName)
                if not os.path.exists(destDirName):
                    os.makedirs(destDirName)

                try:
                    data = f.read(length)
                    data = zlib.decompress(data)
                except:
                    print('[!] Error: Failed to decompress {0}, probably encrypted. Extracting as is.'.format(fileName))
                    open(destName + '.pyc.encrypted', 'wb').write(data)
                    continue

                with open(destName + '.pyc', 'wb') as pycFile:
                    pycFile.write(pycHeader)      # Write pyc magic
                    pycFile.write(b'\0' * 4)      # Write timestamp
                    if self.pyver >= 33:
                        pycFile.write(b'\0' * 4)  # Size parameter added in Python 3.3
                    pycFile.write(data)


def main():
    if len(sys.argv) < 2:
        print('[*] Usage: pyinstxtractor.py <filename>')

    else:
        arch = PyInstArchive(sys.argv[1])
        if arch.open():
            if arch.checkFile():
                if arch.getCArchiveInfo():
                    arch.parseTOC()
                    arch.extractFiles()
                    arch.close()
                    print('[*] Successfully extracted pyinstaller archive: {0}'.format(sys.argv[1]))
                    print('')
                    print('You can now use a python decompiler on the pyc files within the extracted directory')
                    return

            arch.close()


if __name__ == '__main__':
    main()

内部结构:

APK本质是一个压缩包,可以修改为.zip然后解压看到里面的内部文件

AndroidManifest.xml全局清单文件(最重要)

使用雷电我们是可以直接看到的这些内容

内含:APK安装包名、版本、SDK版本、APP运行权限、Activity主入口函数,第三方SDK调用信息

classes.dex(在虚拟机上可执行文件)Bytecode程序代码主体

是我们逆向分析的主要对象是java源码编译生成的java字节文件(是java文件经过jdk编译,再经dex编译生成classes.dex)。可查看域名,IP,加解密算法之类的信息

查看工具:雷电、JEB(看不懂的代码可以使用tab键转换为java语言)、ida等反编译工具

分析方法:先找主程序/入口程序/主函数,然后顺着往下看(合理利用查找)

META-INF(签名信息)

APK中的证书公钥、有效日期、签名以及证书的MD5、SHA-1/256、指纹信息、数字签名(不同的程序可能名字相同但数字签名不同)

resources.arsc(二进制索引文件)

图片,颜色等现在这个文件里面存储,然后在映射道Android的R文件中,形成ID,在使用程序资源是直接就可以通过ID调用

Assets(资源文件夹)

lib(存放so文件)

存放第三方库文件,这些so文件一般都是使用C或C++编写,单靠JAVA很难实现高性能,会依赖SO文件,一般一些隐藏的加密文件都会用so文件封装

根据CPU性能架构,lib分为四种分别是ARM(高通骁龙、麒麟基本都是)、ARM-V7、MIPS、x86(桌面笔记本CPU一般使用),对应目录为armeabi、armeabi-v7a、mips、x86

一般越好的程序他的架构越多,能在各种手机上面使用,甚至电脑

分析方法

混淆市代码加固方式的解决

通过修该代码函数的名字起到影响查找函数的作用,比如把函数名字改成abcdef什么的

先找主函数,可以找LAUNCHER,LAUNCHER上面那个activity名字就是主函数,然后一步步找主函数页面,找到主函数只有再找oncreate

正则表达式搜索

使用魔盾安全可以直接看到一些重要信息

APK动态分析

APK抓包概述

一般抓包使用https抓包

抓包工具

代理抓包工具(小而美):FIddler、Charles等。可以解密https的,tcp之上的都可以解析

非代理抓包:wireshark、httpdebugger

取证抓包工具:应用程序检测大师系统、雷电

FLDDLER抓包

首先下载并配置了flddler的抓包工具

端口写一个不会冲突的端口

然后我们要配置我们的雷电模拟器(注意这里必须要用雷电九,雷电四不能设置WiFi代理)

点击WiFi的齿轮设置手动代理

代理服务器主机名是我们电脑的wife地址

设置完代理之后我们用手机访问就是可以发现是能抓到报的了

确实抓到了

若要解密https流,我们要重新设置

双方都要安装假证书

两者都安装好之后,查看https的官网就可以看到了

这两个图片都有

adb.exe命令

adb.exe在雷电的文件夹里面,使用要使用cmd

使用方法:

先使用adb devices命令测试链接(出现xxx device表示测试成功可以通讯,不成功可以考虑usb模式是否打开)

在手机上打开要测试的软件程序

adb shell dumpsys window | findstr mCurrentFocus(mCurrentFocus表示鼠标当前光标位置,也就是打开的软件) 获取当前窗口特征,比如包名

adb shell ps 获取进程信息,可以找进程名

adb shell pm path 包名 获取安装路径

adb pull + 路径名,可以讲文件备份拉出来,不指定路径的话就默认存储在雷电文件夹下面

安卓文件目录查看:

APP安装包: /data/app/目录

APP存储位置: /data/data/目录

vmdk文件取证

有的时候给的不是E01或者DD镜像格式,而是给的vmdk格式的镜像,一般会给你三个:data.vmdk system.vmdk sdcard.vmdk文件,这种用火眼是不能分析的

解析方法:

手机大师解析

模拟器镜像替换解析:在雷电文件夹下的vms文件里面替换

取证大师解析

常见脱壳与反编译工具 目录 一、Android APK 查壳工具 二、Xposed框架下的脱壳工具 1.Zjdroid 2. DexExtractor(可在真机使用) 3. dexdump 4.FDex2 三、Frida框架下的脱壳工具(方便且持续更新) 1. frida-Android脱壳 2. frida-unpack 3.FRIDA-DEXDump 4.frida_dump 5.FRIDA-APK-UNPACK 四、AndroidKiller脱壳插件: 1.drizzleDumper ... 阅读详情

相关推荐

告别‘壳’烦恼:手把手教你用APK查壳神器+Jadx-Gui搞定App逆向第一步

本文详细介绍了APK查壳工具的使用方法和App逆向分析的第一步流程。通过APK查壳神器和Jadx-Gui的实战演示,帮助开发者快速识别加壳类型并进行反编译,为移动应用安全研究和逆向分析奠定基础。

weixin_28725949的博客 766

Android Spider ApkScan-PKID 查壳工具下载使用以及相关技术介绍

Android Spider ApkScan-PKID 查壳工具下载使用以及相关技术介绍

EXIxiaozhou的博客 2万+

【电子数据取证】APK提取方法

通过提取出来的APK我们可以获取到大量数据信息,例如服务器IP,可疑邮箱、可疑电话等等,并且这些APK很可能在安装的时候侵略我们手机内部的存储文件,将个人私密信息泄露出去,我们要利用好每一个提取技巧把APK提取出来作为分析,能够帮助我们平时更好的了解各种APK。1、打开chrome或是edge浏览器,按F12打开调试模式,把浏览器模拟成手机,方法如下所示:使用本文中概述的方法,我们可以使用Wireshark从流量包中提取各种文件。2、在手机QQ内切换到【联系人】,打开【设备】--【我的电脑】。

longxintec的博客 2244

【逆向分析篇】APK逆向脱壳过程

逆向是一个漫长的过程,以上只简单的对当前主流脱壳方法进行了脱壳分析,在网络的发展中,各种高级加壳、花壳、混淆技术等越来越高级,进阶Apk脱壳技术通过dump内存中处于解密状态的dex,进行修复分析,普通的逆向将难以应对---【蘇小沐】

蘇小沐的电子数据取证博客 7893

[1198]ApkScan-PKID 查壳工具

1、壳的功能:壳最本质的功能就是实现加载器,壳是指在一个程序的外面再包裹上另外一段代码,保护里面的代码不被非法修改或反编译的程序。

周小董 4784

【Frida】【Android】 工具篇:查壳工具大赏

综上所述,Android混淆加壳技术在保护应用程序安全方面经历了从基础混淆到加壳、虚拟化以及自定义加密算法等多个阶段的演变,以应对不断增长的逆向工程挑战和安全威胁。Android混淆加壳技术的演变过程可以追溯到Android应用程序开发的早期阶段。ApkCheckPack是通过go编写的程序,官网支持release版本。加固平台还有很多,以后也会一直增加新的平台和方案,目前比较完整的可以参考。将能收集到的加固特征汇总整理,支持40个厂商的加固检测。soregex 对有版本号的特征so库,使用正则匹配。

kinghzking的专栏 1万+

Android apk逆向脱壳

1、Android模拟器:雷电模拟器,我这Android系统是7.1.2。点击写出dex【长按可脱出多个dex,点击只能脱出当前调用的dex】在模块中打开反射大师,选择需要脱壳的apk,打开软件。开启修复Magic,导出的dex名称可修改。进入到需要查看的界面,点击屏幕中间的芒星。打开jadx软件,打开导出的dex文件。这样就可以查看源代码的,脱壳成功。步骤一:下载逆向相关软件和apk。在模拟器中安装需要反编译的apk。3、下载安装‘反射大师’apk。2、下载安装Xposed框架。步骤三:反编译dex。

时光小偷 4498

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 501

【免费下载】 Android Spider ApkScan-PKID 查壳工具下载使用及技术介绍

Android Spider ApkScan-PKID 查壳工具下载使用及技术介绍 【下载地址】AndroidSpiderApkScan-PKID查壳工具下载使用及技术介绍分享 Android Spider ApkScan-PKID 是一款专为Android应用设计的查壳工具,旨在帮助开发者检测APK文件是否被加壳,并识...

gitblog_06599的博客 1596

Altium Designer20-柔性PCB绘制技巧

Altium Designer2020-柔性PCB绘制技巧 注:教程所用PCB随意找的,并没有完全绘制完,大家学习PCB折弯方法即可。 1.打开PCB,点击视图->板子规划模式1,如下图所示 2.点击设计->定义分割线,用两条分割线绘出要折弯的区域 3.点击设计->定义弯曲线(弯曲线呈现黄色) 4.用快捷键d,k进入layer manage stack(层叠管理器),在f...

weixin_44450279的博客 1万+

一文读懂,WMS仓库管理系统模块功能

对于仓库管理人员来说,仓储管理是一件需要十分负责、又精细化的工作。

深蓝易网的博客 5219

APP渗透—查脱壳、反编译、重打包签名

在之前的文章都主要都是对APK文件进行信息收集,而信息收集后就需要对APP漏洞进行挖掘,但是从本质上来看,APP其实就是将原先应该部署在网站上的页面塞入APP中,所有的调用都是给予服务器,而且在对WEB漏洞进行挖掘的时候,除了部分漏洞是基于本地页面所导致的,其它的可以说基本上就是由于服务端的问题。

剁椒鱼头没剁椒的博客 1万+

相似贴子推荐:基于 LangChain4j + Milvus 的混合检索实战

本文提出了一种基于LangChain4j和Milvus的混合检索方案,用于解决论坛社区中的相似帖子推荐问题。该方案结合稠密向量语义检索和BM25关键词检索的优势,通过RRF算法实现结果融合。系统采用bge-small-zh模型生成语义向量,利用Milvus 2.5+原生支持的BM25功能和混合搜索API,在百万级数据规模下实现50ms内的检索延迟,召回率和精确率分别提升15%和22%。文章详细介绍了从数据预处理、向量化到混合检索的完整实现流程,并探讨了进阶优化方向,为推荐系统和RAG应用提供了高效解决方案。

分享AI、区块链技术及应用,未来已来 89

【亲测免费】 ApkScan-PKID查壳工具

ApkScan-PKID查壳工具 【下载地址】ApkScan-PKID查壳工具 ApkScan-PKID是一款高效实用的安卓安装包查壳工具,专为检测APK文件是否经过加壳处理而设计。通过该工具,用户可以快速识别目标APK的加壳状态,并在可能的情况下获取加壳公司的相关信息,为后续的脱壳测试提供重要参考。操作简单便捷,只需解...

gitblog_06710的博客 1209

Android Treble 简介

上面两段话来自官网上,Android 8.0 重新设计了 Android 操作系统框架(在一个名为“Treble”的项目中),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。本文主要整理一下Android Treble框架。

私房菜 9275

从原理到落地:监控 SAP OData bgRFC 队列的全景实践指南

摘要(150字) 本文系统讲解SAP Gateway/Backend场景中bgRFC队列的监控方法。内容涵盖:1)监控必要性——确保异步可靠传输,及时识别失败消息;2)两种服务质量(EO/EOIO)对监控策略的影响;3)通过事务码SBGRFCMON和SPRO路径访问监控界面;4)关键授权S_BGRFC的配置要求;5)详细操作指南包括筛选条件和动作选项;6)标准巡检脚本;7)三个典型案例(认证错误、顺序阻塞、调度压力)的诊断与修复方案。全文提供完整的监控方法论和实战指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 291

apk反编译以及脱壳记录

了解一下apk的逆向,对自己也有帮助,上面都是一些简单的操作,具体原理没有仔细去了解,要掌握的更多、更透彻,还得去了解一下原理,这个脱壳就是借用大神的工具去实现的,但是原理都没去看,整体下来还是不错的,自己会简单的逆向。但是反编译之后修改再打包还得研究一下。再次说明一下,该文章仅供学习用途、请勿用于非法用途。否则后果自负!

m0_46430119的博客 5334

设计原则:面向对象设计原则详解

我们在应用程序开发中,一般要求尽量两做到可维护性和可复用性。 应用程序的复用可以提高应用程序的开发效率和质量,节约开发成本,恰当的复用还可以改善系统的可维护性。而在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。面向对象设计原则和设计模式也是对系统.........

黄规速博客:学如逆水行舟,不进则退 4万+

Apk脱壳之—脱掉“360加固”的壳

为了让运行中的所有进程共享系统运行时所需要的各种设置值,系统会开辟一个属性存储区域,并提供访问该内存区域的 API。3、在脱爱加密的壳的时候,给dvmDexFileOpenPartial函数下断点,来获取dex在内存的起始地址和大小,从而dump处内存中的dex数据,但是360加固并没有走这个函数,因为在给这个函数下断点的时候,他压根没走到,所以断定它内部使用了其他的函数去解析dex的,然后加载到内存中的,但是如果最后加载到内存中,那肯定要用到mmap函数,所以只要给mmap函数下断点即可。

MyselfGang的博客 1万+

Plecs standalone 4.9.5最新版本,赶紧来下载使用吧,需要做并网逆变器及光伏储能变换器的朋友赶紧下载起来

PLECS 4.9.5较4.7.1版实现全面升级:采用自适应求解器切换技术,支持多核CPU/GPU加速,仿真速度提升30-50%;新增模型引用功能,实现模块化设计;强化光伏/风电等新能源组件,支持多物理场耦合分析;优化代码生成功能,兼容多种硬件平台和FMU导入。新版特别适用于复杂电力电子系统、多域联合仿真及硬件在环测试项目,但对硬件配置要求更高。基础教学项目仍可使用4.7.1版本。建议用户根据项目复杂度选择升级方案。

2447

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

(转)Detect it Easy(壳侦测工具)使用方法介绍

http://www.ucbug.com/jiaocheng/129805.html Detect it Easy是一个多功能的PE-DIY工具,主要用于壳侦测。功能正日益完善,是不可多得的破解利器!支持文件直接拖放,可添加到右键菜单 Detect it Easy是一个多功能的PE-DIY工具,主要用于壳侦测。功能正日益完善,是不可多得的破解利器!支持文件直接拖放,可...

weixin_34005042的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

一款惊艳的Android脱壳工具

今天给大家带来的项目是:dumpDex-Android脱壳有加密就有解密,Android的App也是如此。市面上有很多加壳工具,比如梆梆、爱加密、乐固等,有收费的也有免费的,还有就是公司自己研发的给公司内部App使用的加密工具。我们今天介绍的是怎么给加了壳的App脱壳,这里用到的工具是dumpDex。插件需要在xposed环境中使用,支持市面上大多数加密壳,软件仅供学习用,请勿用于其他用途,项目不是成品,可能会引起软件崩溃.

2401_84004024的博客 6248

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android脱壳工具整理

现在开源的脱壳工具比较多,今天我们来分享几款比较常见的脱壳工具,有刷入定制系统的脱壳机方式的,有Xpose模块hook关键函数的,也有Frida工具hook脱壳的,各有优缺点,小伙伴们可以自由搭配使用。 FART 这款脱壳工具是寒冰大佬写的,是通过刷入大佬定制的系统,进而在程序运行中动态脱壳。 具体介绍可见大佬的github:https://github.com/hanbinglengyue/FART 原理介绍:https://bbs.pediy.com/thread-252630.htm 有些人可

Andy0214的专栏 2万+

部分壳与脱壳

壳与脱壳 对网上部分壳与脱壳的摘录与总结,仅供参考

megaparsec 4302

Detect It Easy

其中,「模式」说明程序是 32 位还是 64 位,还能看到程序的编译时间以及编译器和链接器信息。如果程序被加壳,还可以显示壳的详细信息。DIE 不仅能检测 Windows 系统下的 PE 文件,包括PE文件中包含的导入函数、导出函数的名称及地址,入口函数地址等,还可以检测 Linux 下的 ELF 文件,是目前最好用的查壳、文件类型识别工具。对程序静态分析时,建议优先使用该工具查看基本信息。这是我推荐它的直接理由;最后它可以在进行逆向分析时,它可以快速帮我查出软甲加壳的相关信息,也可以让我快速定位相应。

weixin_49765221的博客 2520
上一篇: 2022美亚杯团队赛
下一篇: 联合取证校赛ZJ
keNn9s
博客等级 码龄5年 58粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值