代码混淆逆向黑客_代码混淆后怎么反编译

hacker|
80

文章目录:

使用python语言如何保密源代码以防止逆向工程?

大家都很忙,谁有时间看你的的烂代码!

如果真的怕泄露,别用python.

我以前做过这类事情,而且当时更严格,需要打包部署到客户的服务只在有效期内有效,超过有效期必须更新证书才行。

Python代码用任何方法都没法保证保密性,这个时候你可以考虑用一个工具「nuitka」,这个工具会把你的python源代码映射为c++然后编译为二进制,因此对方是无论如何得不到你的源代码的。

代价就是nuitka这个工具并不完美,有一些限制并不能100%完美的转换所有python代码。

1.用Cython编译python成 Windows的pyd文件或Linux的so文件,二进制文件相对安全性较高。

2.用源码混淆器把代码搞的又臭又长。。。混淆完了再用Cython编译为二进制。。。这样静态反编译逆向难度也不小。

3.同其他语言程序一样,可以对调试状态进行检测,当处于调试状态时退出程序或进入混乱代码耗费逆向工程人员心神。

4.分享一个跨平台反调试手段,检测函数运行时间,加断点会导致函数运行时间变长,也可感知正在被调试。

Python是提倡开源的,既然选择Python还是拥抱开源才好~ 都开源还担心逆向工程嘛

没有不能逆的软件。

只要汇编语言过关,逆向工程都是可以实现的,不要有其它想法。

你唯一可以做的,就是不让别人用python读取源代码而已。那样实现起来比较简单。

python 适合开发服务器程序,或者自己科研使用的程序,如果是 作为用户程序,安装到 pc 或手机上,还是 其它 c++ 或java 比较合适

1)可以把需要保护的部分用c语言实现,从而编译成so等文件,这样逆向的成本会比较高,可以防止直接打开python文件看到代码逻辑。

2)so文件通过ida等工具也是可以反汇编的,可以通过对c语言进行代码混淆,花指令等操作,提高通过ida等反汇编工具的分析难度。

3)不存在绝对无法逆向的技术手段,因此只能是看具体需求,选择具体的防逆向的技术手段。

有工具类似py2exe转成可执行程序,隐藏全部源代码,虽然bytecode还是可以反编译,但是难度大多了

1. 最稳的就是你改cpython加载代码的过程,改zip包读取最稳。

2. 借助一些加密工具在编译pyc之前进行一定的混淆,可以防君子,自我安慰一下。

商用一般都是用第一种办法,小打小闹用第二种。

可以考虑使用pymod工具,使用pymod pack 将模块加密打包,发布的时候一个模块就一个文件。

先睹为快,看看一个项目发布的时候,只有几个文件,

main.py 项目程序入口

setting.py 项目配置

apps 项目模块

plusins 项目插件目录

创建项目 pymod create demo1

cd demo1

创建模块 pymod add mod1

启动pycharm 开始编写功能模块

一个模块默认由三个文件组成

__init__.py 、 handlers.py 、param_schemas.py

业务逻辑主要在handlers.py中编写

__init__.py

from pymod.blueprint import Blueprint api = Blueprint("/mod1") from .handlers import *

param_schemas.py

schema_sfz = { "type": "object", "required": ["sfz", "nl"], "properties": { "sfz": { "type": "string", "minLength": 18, "maxLength": 18, "description": "身份证明号码" }, "nl": { "type": "integer", "minimum": 0, "maximum": 150, "description": "年龄" } } }

handlers.py

from . import api from pymod.ext import RequestHandler, params_validate,TrueResponse,FalseResponse from .param_schemas import schema_sfz from pymod.plugins import sfz_check @api.add_route('/hello') class Hello(RequestHandler): def get(self): self.write('Hello World') @params_validate(schema_sfz) def post(self): sfz = self.get_json_arg("sfz") nl =self.get_json_arg("nl") # self.write(TrueResponse(sfz=sfz, nl=nl)) if sfz_check.check_sfzmhm(sfz): self.write(TrueResponse(hint="身份证明号码验证通过")) else: self.write(FalseResponse(hint="身份证明号码验证失败"))

三、项目部署

程序调试 修改setting.py

# 开发模式下 运行的模块名称必须填写

modules = ["mod1"] modules_config ={ "mod1": { "deny_ip": "", "allow_ip": "*" } }

启动程序 python main.py

调试没有问题,进入发布模式

在项目目录下

pymod pack mod1

在target目录下生成mod1.mod文件,将其复制到apps目录中

修改setting.py

# 开发模式下 运行的模块名称必须填写

modules = []

再次运行 python main.py 测试

一切OK,系统就可以发布了。

说不能保密的,是没有研究过python的机制的。我做个一个项目,所有源代码自定义加密,运行时解密。

如何有效的防止Java程序被反编译和破解

由于Java字节码的抽象级别较高,因此它们较容易被反编译。下面介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。

1.隔离Java程序

最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。

2.对Class文件进行加密

为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。

在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。

3.转换成本地代码

将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法。

4.代码混淆

代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术。

vue代码混淆后可破解吗

可以。根据查询Vue代码的相关资料显示,混淆代码可以逆向破解。代码混淆保护代码的同时,对代码进行了压缩处理。被混淆的代码难于理解,因此调试以及除错也变得困难起来。

手机游戏用Cocos2d游戏引擎的开发代码如何保障不会被逆向破解?

目前针对Cocos2d游戏引擎的开发代码防逆向主要是通过隐藏lua脚本文件,根据爱加密介绍,通过隐藏lua脚本文件,可以保护代码不被黑客给逆向,从而保护游戏逻辑的安全性。希望可以采纳,谢谢!

报警电话会被黑客劫持吗

拨打110,接电话的却是骗子?安天移动揭秘“劫持报警电话”病毒原理 | 宅客黑镜头

雷峰网

雷峰网

5年前

今天的宅客“黑镜头”,我们来看一个逆天的诈骗剧本:

1、你收到一条短信,内容是:电子凭证或者单位代号,其中附加了一个链接。你觉得这条短信可能和自己的工作生活相关,于是点击了链接,有一个名为“最高人民检察院”的 App 被安装到了手机上。

2、几天后,你突然接到来自“警方”的电话,对方严厉地警告你:你涉嫌犯罪,需要配合调查,把资金转移到警方的“安全账户”。

3、你表示呵呵,因为你曾经听说过这样的骗局。对方说,你不信的话,我可以帮你转接到“检察院”,你自己来核实。

4、你表示呵呵:“你们转接的电话,我怎么知道是不是打到检察院呢?”对方淡定地说:“没关系,你可以挂掉电话,拨打110查询一下。”

5、你将信将疑,挂断电话并且拨打110,电话接通后,“警方”经过查询,告诉你确!实!存在犯罪嫌疑,你开始方了。

在以上的“戏剧”中,电话那头的人确实是骗子无疑。但是有一点你可能会百思不得姐,那就是:

为神马拨打 110 报警电话,都会接通到骗子那里?

为了解答这个秘密,安天AVL移动安全团队“卧底”调查长达两年时间。揭开了这类伪装成“最高人民检察院”应用的 Android 木马病毒,并且发出了详尽的报告:《病毒四度升级:安天AVL Team揭露一例跨期两年的电信诈骗进化史》

雷锋网宅客频道获得安天AVL移动安全团队授权,转发报告全文如下:

自2014年9月起,安天AVL移动安全团队持续检测到一类基于Android移动平台的间谍类病毒,病毒样本大多伪装成名为“最高人民检察院”的应用。经过反编译逆向分析以及长期的跟踪调查,我们判断这可能是一起有组织的电信诈骗犯罪活动。

2014年9月至今,某诈骗组织持续以涉嫌犯罪为由恐吓受害者,并进行电信诈骗活动。整个诈骗流程大致如下:

攻击者首先向受害者的手机发送含恶意应用下载链接的短信,这一步可能是借由伪基站群发短信实现的;

攻击者通常以获取“案件号”、“单位代号”、“电子凭证”的短信诱骗受害者点击链接,下载安装恶意程序,最终获取受害者手机的root权限;

恶意程序被成功安装到受害者手机后,诈骗者会主动打电话给受害者,并声称将电话转接至检察院确认,但现在大部分人都对这类电信诈骗的防范意识较高,会拒绝对方的电话转接;

此时,诈骗分子会主动要求受害者挂断电话,并亲自拨打110确认事件的真伪。当受害者将电话拨出后,安装在受害人手机中的恶意程序将原本拨打给110的电话,劫持之后转为拨打诈骗者的号码,从而让受害者信以为真,完全落入圈套。

通过AVL移动互联网恶意程序检测平台捕获数据可以看到,该类型病毒样本首次出现在2014年9月。在此后两年时间里,又先后捕获到4类包结构各不相同的病毒新变种样本180余个。这类病毒的感染者主要分布于我国浙江省和广东省,福建、湖北、江西等地也有感染案例。

在该病毒不断进化的进程中,攻击者先后注册了多个CC服务器,相关IP地址16个,服务器分布在香港、新加坡、日本等5个以上的国家和地区。由此我们可以看到攻击者通过不断变换地点等手段来逃避侦查。

恶意行为详情分析

恶意行为实现流程示意图

文章图片1

伪造电子凭证

当恶意应用被成功安装并运行后,受害者手机会显示一个伪造的最高人民检察院发布的电子凭证,恐吓受害者因涉嫌犯罪,而需要接受调查。此时,防范意识薄弱的受害者可能会直接相信对方。即便其他受害者具备足够的防范意识,诈骗者依然有办法逼其就范。那就是劫持受害者手机的报警电话,然后明确告诉受害者可以自行拨打110确认。

以下是伪造的最高人民检察院发布的电子凭证样例。从以下三张电子凭证样例,我们可以看到检察长的签名都是根据现实情况不断更新,说明攻击者最大程度消除受害者对此电子凭证的怀疑,提高电信诈骗的成功率。

文章图片2

劫持报警电话

文章图片3

从以上代码截图可以看到,即使受害者是自行拨打的报警电话,电话那头依然是诈骗者,从而使得受害者信以为真,最终落入攻击者圈套,后果不堪设想。

上图中诈骗分子劫持的目标号码如下:

文章图片4

其中“021110”并非源码中显示的湖北省公安厅,而是上海市公安局。

窃取受害者隐私数据

作为整个电信诈骗链条上的重要一环,该病毒本质是一款间谍件。其功能不仅是显示检察院电子凭证以恐吓欺骗受害者,还在后台窃取用户隐私数据并上传至指定恶意服务器,给受害者的个人利益带来更大损害。

该病毒会开机自动运行,运行后自动生成用于显示电子凭证的activity组件,同时在后台启动用于窃取用户隐私数据的service组件。

该组件service组件首先创建一个名为phoneConfig.db的数据库文件并将其初始化。该数据库主要记录呼出会话和当前配置信息两项数据,其在库中的索引分别为“phoneCall”和“config”。当数据库数据需要更新时,程序会删除旧表并重新创建和初始化数据库。该数据库可以在/data/data对应应用包目录下找到。具体的数据库表内容如下图所示。

当然,这远不是该间谍应用要盗取的全部隐私数据。接下来,它会使出浑身解数获取受害者设备上的各类数据,并将它们写入JSON保存起来。

通过分析反编译代码,我们总结该病毒意图盗取的数据种类如表1所示。

文章图片5

上传受害者隐私数据

获取到受害者的隐私数据后,下一步攻击者会通过联网将其上传至服务器。这一部分主要是在应用/lib/armeabi文件目录下的libjpomelo.so动态库文件中实现的。

该间谍件通过与远程服务器建立HTTP连接完成隐私数据上传的行为。具体过程如下图所示。

文章图片6

文章图片7

至此,隐私数据上传完成,受害者手机隐私数据完全掌握在攻击者手中。

病毒变种进化历史

一、萌芽期(2014.9~2014.11)

· 更多的是一些尝试性的攻击

· 该阶段存在两类初代病毒样本,均已具备劫持报警电话的恶意行为

· 作为间谍件窃取数据种类少,功能单一,基本不具备对抗性

二、平稳期(2015.3~2015.8)

· 主要功能仍是劫持报警电话

· 在其中一类初代病毒的基础上做了初步对抗

· 增加窃取数据的种类

三、一次活跃期(2015.9~2016.2)

· 病毒感染量激增

· 犯罪分子新注册多个海外服务器域名

· 病毒新变种的对抗性大幅增强

四、二次活跃期(2016.11至今)

· 病毒感染量呈明显上升趋势

· 几代变种的样本均有发现,情况更为复杂

· 最新型的病毒变种对抗性再次增强

第一阶段:萌芽期(2014.9~2014.11)

在电信诈骗的萌芽期同时活跃着两种类型的病毒变种,它们都具有劫持电话号码以及窃取用户个人数据的行为。其区别在于攻击受害用户设备后获取隐私数据的手段不同。

第一种类型:

以样本

7692A28896181845219DB5089CFBEC4D为例,该变种主要窃取用户的短信数据。它会设置接收器专门用于监听收到新消息的事件,一旦有来信则立即获取其发信方电话号码以及短信内容,并转发至指定号码。

第二种类型:

以样本

4AD7843644D8731F51A8AC2F24A45CB4为例,该变种的窃取对象不再局限于短信,而是拓展至被攻击设备的固件信息、通讯运营商信息等。另外该变种还会检视设备的响铃模式并私自将其调为静音。

就窃取受害用户隐私数据的手段以及窃取的数据种类而言,第二类变种是后续阶段其他病毒变种的元祖。

综合这一阶段的病毒样本,我们发现,不论采用哪种方式获取来自受攻击设备的信息,其对抗性都较弱,对一些容易暴露自己的数据基本没有保护。比如我们从中挖掘到的一些短信转发地址以及远程服务器IP地址和端口号等信息,都是直接以明文形式硬编码在程序中的,很容易被反编译逆向分析,也难逃手机安全软件的查杀。

第二阶段:平稳期(2015.3~2015.8)

该阶段是诈骗的平稳期,或者也可以称为低潮期。这一阶段的攻击表现得不是很活跃。可以理解为诈骗分子的攻击欲望有所衰减,或是蓄势发起新一轮攻击。总体而言,病毒量明显减少。

至于阶段样本中存在的一些新变种,多是在萌芽期第二种类型病毒变种的基础上进行结构形态上的改变,同时采用了代码混淆技术,做了初步的对抗。但其在具体功能上几乎没有发生任何改变。

第三阶段:一次活跃期(2015.9~2016.2)

这一阶段与上一阶段有着明显的分界线。2015年9月1日,手机卡实名制的法规正式开始施行。手机号码与个人身份证绑定,这就意味着攻击者难以再通过短信转发的手段获取受害者的隐私数据,因为攻击者手机号的暴露极大地增加了攻击者被追踪到的风险。

因此,2015年10月以后捕获到的病毒新变种中,短信转发用到的手机号码以及一些指定的短信内容不再直接出现于程序代码中,而是通过联网从远程服务器端下载并解析获取。

从病毒功能上看,该阶段与上一阶段没有太大变化,仍是以劫持电话号码及窃取用户隐私数据为主。

但是攻击范围在本阶段达到了前所未有的高峰。一方面,病毒的感染量激增,病毒样本层出不穷;另一方面,之前恶意服务器几乎都设置在香港,这一阶段陆续出现了韩国、新加坡、日本等新的地点。我们可以推测这是攻击者在为更大规模的电信诈骗做准备,同时更好地隐匿自身踪迹,逃避侦查。这次攻击高峰直至次年2月才逐渐平息。

第四阶段:二次活跃期(2016.11至今)

第一次活跃期过后,诈骗犯罪活动又历经了半年多的平稳期。在这期间,病毒样本数量虽有明显减少,但仍可持续捕获。病毒样本功能未发生较大变化。

直到今年11月上旬,该病毒攻击再次进入活跃期。从新一轮攻击中捕获到的样本来看,该病毒一部分沿用了上一阶段的变种,有些加入了新的对抗机制。另一部分则采用了新型变种,将窃取数据上传服务器的功能实现从Java层转移至SO动态链接库,攻击所需的资料更多是通过从远程服务器下载获取。攻击的危险性与不确定性都有所增强,同时也进一步增加了安全检测和逆向分析的难度。

从本阶段的攻击规模来看,仅11月8日至13日不到一周的时间里,我们就捕获到了35个病毒样本。

截至11月13日,该病毒样本日均捕获量近6个,诈骗活动仍在持续。

文章图片8

文章图片9

远程服务器IP溯源

对远程服务器进行溯源分析,我们可以发现服务器大多分布在香港,并在后期扩散至韩国、日本、美国等国家和地区。通过将获取到的IP地址在WHOIS和VT等第三方数据源进行信息反查,得到如下表所示的结果。特别地,这些归属地只是诈骗分子利用的服务器所在地。

文章图片10

注:表中数据来自相关IP在whois.net及virustotal.com的查询结果

总结

通过对该病毒的详细分析,我们发现该病毒迄今已使用了6种不同形态的木马。除去最开始可能用作测试的一种,其它的按照结构、功能等指标大致可以分为四代。早期的木马基本不具备对抗行为,包括短信转发地址的电话号码和隐私数据上传的服务器IP等皆明文硬编码在程序中,较容易被分析追踪和查杀。到2015年9月1日,手机卡实名制正式开始实施,这意味着攻击者信息更容易被侦查。

就在同年10月,病毒新变种开始采取混淆等对抗手段隐藏攻击者信息,短信发送地址及短信内容等数据也转而通过从服务器下载获取。到2016年11月,病毒将窃取数据上传服务器的功能实现部分从Java层转移至SO动态链接库,攻击所需的资料更多是从远程服务器下载获取,攻击的危险性与不确定性都有所增强,在一定程度上增加了安全监测和逆向分析的难度。综合来看,该电信诈骗持续的周期较长(持续2年以上),攻击手段不断变换。我们可以推断犯罪分子可能为混迹在港台地区的诈骗组织,具有高度的组织化,其诈骗行为极端恶劣,需要引起足够重视。

另外,纵观至今的诈骗活动周期,高峰往往起始于每年年末(9~11月)并结束于次年年初(2月左右),说明年终岁末通常是电信诈骗的高发期。时值年关,广大手机用户务必当心,谨防受骗。

安全建议

针对这类恶意

4条大神的评论

  • avatar
    访客 2023-03-28 上午 02:21:42

    务器大多分布在香港,并在后期扩散至韩国、日本、美国等国家和地区。通过将获取到的IP地址在WHOIS和VT等第三方数据源进行信息反查,得到如下表所示的结果。特别地,

  • avatar
    访客 2023-03-27 下午 09:56:45

    ~2014.11)在电信诈骗的萌芽期同时活跃着两种类型的病毒变种,它们都具有劫持电话号码以及窃取用户个人数据的行为。其区别在于攻击受害用户设备后获取隐私数据的手段不同。第一种类型:以样本7692A28896181845219DB5089CFBEC4D为例

  • avatar
    访客 2023-03-28 上午 02:30:33

    地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在

  • avatar
    访客 2023-03-28 上午 09:18:46

    犯罪活动又历经了半年多的平稳期。在这期间,病毒样本数量虽有明显减少,但仍可持续捕获。病毒样本功能未发生较大变化。直到今年11月上旬,该病毒攻击再次进入活跃期。从新一轮攻击中捕获到的样本来看,该病毒一部分沿用了上一阶段的变种,有些加入了新的对抗机制

发表评论