-
推荐使用rpx替代upx的公告
2019-11-26 17:53:07但动态绑定时,upx无法被准确编译,此时官方提出了使用uni.upx2px()方法,用来动态计算。 后来其他几家小程序平台陆续都兼容了rpx机制,rpx不再是微信的专用单位,而成为了这个行业的通用单位。...推荐使用rpx替代upx的公告
分类:uni-app
upx在2018年就推出了,其初衷是为了让微信的rpx机制可以跨全端使用。
在普通css写法里,upx会被编译器编译。但动态绑定时,upx无法被准确编译,此时官方提出了使用uni.upx2px()方法,用来动态计算。
后来其他几家小程序平台陆续都兼容了rpx机制,rpx不再是微信的专用单位,而成为了这个行业的通用单位。
最近官方收到很多开发小程序的用户投诉upx不能像rpx那样直接支持动态绑定,还得再使用uni.upx2px方法。
官方反思了策略,既然微信不可能支持upx的动态绑定,不如我们在App端和H5端来支持rpx的动态绑定。这样rpx就可以全端通用,且支持动态绑定,不再需要uni.upx2px方法。
从HBuilderX 2.0.5起,已经支持rpx的正常着色和px2rpx的ide代码提示转换功能。
官方也修改了uni-app文档中关于尺寸单位的介绍,不再推荐upx的使用,而推荐rpx。
这个策略调整,不影响开发者的已有代码正常运行。
开发者仍然可以使用upx和uni.upx2px,也可以改用rpx,都可以。没有必要批量调整老代码。但新开发还是应该使用rpx。
顺便提醒另一个事情,很多开发者对响应式单位依赖太严重了,比如组件高度或字体大小也使用upx/rpx。
注意只有当你需要某元素的单位要根据屏幕宽度大小变化时,才需要rpx这类动态宽度单位。
一般情况下高度和字体大小是不应该根据屏幕宽度变化的。
-
UPX外壳
2006-03-16 00:00:00由于使用习惯的关系,我几乎完全模仿aspack的界面来设计这个程序,唯一的遗憾是我无法知道压缩的进度。另外,程序中提供了很多附加的选项,也都是模仿aspack制作的。甚至制作了同exe÷dll÷ocx文件的右键菜单关联。... -
手脱定制版的android SO UPX壳
2020-07-17 14:16:48一 前言 ...但是对于定制的UPX壳使用原生UPX是无法脱壳的。定制版的UPX一般有以下2种形式: 1将里面的魔术字符串改掉。下图是UPX源码中定义的魔术字以及修改后的例子: 源码中的魔术字 ...一 前言
加固厂商SO的加壳,一般都是采用UPX壳实现的。如果用原生的进行加壳,可以使用原生UPX进行脱壳。但是对于定制的UPX壳使用原生UPX是无法脱壳的。定制版的UPX一般有以下2种形式:
1 将里面的魔术字符串改掉。下图是UPX源码中定义的魔术字以及修改后的例子:
源码中的魔术字 修改后的例子
2 加密算法改掉或数据结构进行更改。
这里讨论是如何手脱一个定制的UPX壳,尤其是更改加密算法或者数据结构的定制的UPX壳(以AJM为例)。先看一下脱壳后的样子:
脱壳前 脱壳后
二 UPX壳loader
加壳一般需要加密和解密2个过程,UPX壳也不例外。UPX壳的解密是由 upx loader实现的。在UPX加壳过程中,将loader放在init段,确保loader先获得程序执行的控制权。
Loader程序是由汇编代码实现的,下面是upx源码中针对arm平台的汇编代码:
在 dynamic段中,init标志值为:0x0C,见下图:
下面是loader在dynamic中的位置:
当loader开始运行时的步骤如下:
从loader执行流程可以看到如下:
1、loader是由汇编代码内嵌实现的,因此要解决重定位的问题,所以其中的函数调用都是使用系统调用实现的,比如mmap 以及mprotect等函数。
2、loader 程序要将加密数据解密,解密后的数据要覆盖加密数据。
3、由于upx使用的是压缩算法,因此解密后的数据会比加密的数据大,此时loader程序也会被解密后的数据覆盖,所以loader在解密前要拷贝到内存中执行。
三 linker加载so
Android系统的linker加载是通过dlopen函数实现的。以4.4源码为例如下:
四 手脱UPX壳的原理
前面说加壳一般需要加密和解密2个过程,UPX壳也一样。我们手脱指的是不用研究加密算法,动态脱壳。当upx的loader执行完后,代码也解密完成了,并且加密的数据被解密后的数据覆盖,是否可以直接在这个时间点,将SO从内存中dump出来就可以了呢?
确实可以在这个时间点将so从内存中dump出来,但是只有这样是不行的,需要解决以下4个问题:
● 由于此时代码已经重定位完成,dump后plt段等信息已经包含了重定位后的信息,也就是绝对地址,此时静态用IDA打开,很多函数都无法识别。
● Segment段中的Load段需要恢复,UPX加密后将原始的load段的大小由原来的加密前的大小改成了加密后的大小,因此需要修复。
● Segment段中的 dynamic段在文件中的偏移需要修复。UPX将dynamic在文件中的偏移改变了。
● section 段修复。对于section段的修复论坛里面有很多,这里就不讲了。
因此解决了前面三个问题就可以实现手脱UPX壳了。
1 解决重定位的问题
我们的目标是手脱UPX壳,因此我们可以将linker中执行重定位代码nop掉,就是不让linker执行重定位的操作,自然PLT等段中就不会带有重定位的信息。
通过前面分析linker加载so的过程,soinfo_link_image调用soinfo_relocate实现重定位,下图是源码中相关调用:
下面是在linker中的对应的汇编代码( 对于如何找到对应汇编代码,只要在IDA中搜索字符串“[ relocating %s plt ]”就可以找到):
直接将上面的对sub_1464函数改成对应的”c0 46 c0 46”(thumb nop指令) 就可以。我们知道如果SO本身又调用了其他的SO,此时会优先加载其他的SO,因此注意nop的时机,避免将不是UPX壳的其它SO重定位也执行不了。
2 如何恢复segment段的load的大小
我们知道upx壳的loader会对加密的数据进行解密,解密后的数据大小,就是对应load段的大小。
下面是UPX壳部分数据排列顺序:
下面是对应SO文件init入口数据:
l_info p_info b_info结构大小都为12个字节,如下:
根据上面的loader地址我们知道第一个l_info结构的地址为0x6508。见下图:
我们先不关心l_info和p_info结构,我们只关心b_info结构。对于b_info结构,第一个成员是压缩前的大小,第二个成员是压缩后的大小。因此我们可以通过b_info获取到被压缩数据的压缩前的大小:
从上图可知,第一个b_info结构对应的压缩块:
● 压缩的前大小为:0x154
● 压缩后大小为0xA2
这个块是对应ehdr和phdr的,我们跳过这个块,到达第一个load段对应的b_info结构。其地址为 :0x652C+0xA2 = 0x65CE,见下图:
从上图中对应的b_info结构,我们知道第一个load段压缩前大小为:0XDDC58。
3 内存dump的时机
我们必须在UPX解密后,并执行原始SO的init前进行dump。因此我们就在linker执行完第一个init函数,也就是upx的loader函数后开始dump。因此断点的位置下图中的0x274A位置:
4 修复load段
将上图中第一个load段的0x8B290改为我们之前获得0Xddc58。同时将第二个段的文件偏移和虚拟地址偏移改成一样,都为E5C60。
5 修复dynamic段
对于UPX壳,原始的dymic段的文件位置被修改了,但是对应加载后的内存的位置并没有修改,因此我们直接将其在文件中的偏移改成与内存偏移一致就OK。如下图:将0x8E888改成0xE6888。
四 总结
1 将linker中的 soinfo_link_image函数中对soinfo_relocate调用 NOP(避免重定位造成内存dump后IDA分析问题)
2 在upx init(loader)入口处找到第一个l_info地址,从而获取到第一个b_info结构地址;
3 跳过第一个b_info对应的压缩数据块,到下一个压缩段的b_info;
4 从b_info结构中获得压缩前的大小;
5 执行完upx的解压后,从内存中dump UPX壳;
6 将第一个load段的文件大小 虚拟地址大小,物理地址大小都改成压缩前的大小;
7 将第二个段的文件大小,虚拟地址大小,物理地址大小都改成相同;
8 将dysmic修正(将文件偏移改成与虚拟地址偏移一致);
9 将sht清0(后者在文件结尾找个位置,同时将sht_size清0)。(也可以根据dynamic修复)。
-
Upx Shell V1.01 Build10.12.10.12
2013-04-14 12:22:33这是一个非常好的非官方 UPX (Ultimate Packer for Executables) Windows 图形界面程序, 而且新版本中已经集成了 UPX 3.08 和 3.09 两个版本, 可让使用者自由选择, 并不需要你的系统中已安装 UPX(我还同时放上 UPX ... -
修复CAD无法弹窗口(AutoCad Tweak) v1.3绿色版.rar
2019-07-09 20:39:53本软体使用Mpress/upx压缩,可能引起杀软误报。 5.Delphi XE2真的很强大,生成一个软体的体积暴增,但对于现在的大硬盘年代,可以忽视了。顺便一提XE2终于可以在WIN7 64位 8GB内存下良好的运行。期待Next One ... -
uniapp使用canvas的一些问题
2020-11-26 10:48:101、canvas无效,出不来 ...在自定义组件下,第二个参数传入组件实例this,若不传,则无法显示 2、canvas绘制图片(drawImage)无效,显示不了 修改前: let imageW=uni.upx2px(456)//图片的尺寸 let imgUrl=this.sha1、canvas无效,出不来
修改前:let ctx = uni.createCanvasContext('shareCanvas');
修改后:
let ctx = uni.createCanvasContext('shareCanvas', this);
在自定义组件下,第二个参数传入组件实例this,若不传,则无法显示
2、canvas绘制图片(drawImage)无效,显示不了
修改前:let imageW=uni.upx2px(456)//图片的尺寸 let imgUrl=this.shareData.image//动态的图片,网络路径 ctx.drawImage(imgUrl,0,0,imageW,imageW) ctx.draw();
修改后:
let imageW=uni.upx2px(456)//图片的尺寸 let imgUrl=this.shareData.image//动态的图片,网络路径 uni.downloadFile({ url:imgUrl, success(res){ ctx.drawImage(res.tempFilePath,0,0,imageW,imageW) ctx.draw(); } })
uniapp的drawImage绘制图片和微信小程序一样,图片路径不能使用网络路径,必须先下载到本地(使用uni.downloadFile()下载成临时文件路径也行)
-
加壳程序无法准确读输入表的解决办法
2019-09-25 09:55:13这是我自己写的一个简单程序,放到PE工具里观察输入表: 然后我们随便用一个加壳工具...首先用 PE 工具查壳,发现是 UPX(顿时有了信心 ???? ) 用 OD 打开 租号玩.exe ,选择 “否” 我们尝试使用 ESP 定律法脱壳,...这是我自己写的一个简单程序,放到PE工具里观察输入表:
然后我们随便用一个加壳工具给原本的程序加壳,再次观察它的输入表内容,发现已经有了变化(少了很多):
所以我们就要尝试脱壳,读取它正确的输入表内容,下面以 “租号玩.exe”(假的) 这个程序为例。首先用 PE 工具查壳,发现是 UPX(顿时有了信心 ? )
用 OD 打开 租号玩.exe ,选择 “否”
我们尝试使用 ESP 定律法脱壳,留意 ESP 的值:
单步 F8 一次,发现 ESP 有变化:
数据窗口中跟随 ESP,在这个地址下硬件访问断点:
F9 运行程序,在如下位置断下:
(留意我下断点的红色地方,这个 jmp 是一个大跳转,很可疑)
记录下 jmp 的地址,到内存窗口看下,发现这个地址位于 .text区段,说明这里就很可能跳转到了 OEP。
跟进去看一看,发现果然是 OEP 的样子:
然后我们就可以保存找到的 OEP 位置了,在反汇编窗口右键 - 用 OllyDump 脱壳调试进程 - 脱壳。
再次使用 PE 工具观察,发现已经脱壳成功,而输入表也恢复了正常:
-
用pyinstaller封装python3.6脚本,生成的exe无法加载所需的包怎么办?
2017-08-13 05:59:28我尝试在另一台装有python3.5和要用的包的电脑上使用pyinstaller,按照同样的方法生成exe,运行结果是一样的。我看了看代码中的24行是加载BeautifulSoup命令:from bs4 import BeautifulSoup 谷歌看了半天也找到... -
Fix: The configuration file is generated in the current directory and improve the use of containers
2020-12-25 16:44:20<div><p>由于该容器无法以守护状态运行,所以提此PR. <p>The configuration file is generated in the current directory and improve the use of containers <p>change: 1. 配置文件在当前目录下生成 2. 使用... -
逆向分析破解一款会务管理软件
2011-04-06 16:11:00声明:请支持使用正版软件,尊重原作者的劳动成果,此文只做技术交流,如有他人利用,产生后果,不负任何责任。 最近破解一款会务管理软件,用PEid侦查外壳,发现是是穿山甲的 外壳, 但是... -
uniapp获取屏幕宽度的方式_uni-app如何实现rem自适应手机屏幕尺寸?
2020-12-20 21:23:08uni-app里是可使用upx自动适应屏幕,可我一开始写的是Html,后面因为有需要,所以才转去了Uni-app,可是在Html中写好的rem自适应转换px无法使用,在网页上运行是没有问题的,但在真机测试中无法运行,这是为什么呢?... -
starctf_2019_upxofcpp
2020-04-30 14:30:53Delete以后没有清空指针,存在UAF,但是无法double free,因为程序中使用虚表调用,delete一次后,虚表对应位置已经被清空。因此第二次delete同一个chunk将进入else语句,进而崩溃。由于函数指针放在chunk里,因此,... -
Python编写一个简单的百度搜索应用
2018-12-04 23:28:08由于天气因素,无法外出,在家闲来无事,使用Python编写一个简单的百度搜索应用。 功能:打开默认浏览器,使用百度进行搜索 Python:2.7.13 第三方库:pyinstaller(打包软件) 工具:upx-3.95-win32(压缩exe... -
ctf实验室2020-12-07出题记录
2021-01-14 22:10:36将exe文件放入PE中查看一下发现exe带有upx壳,无法直接使用ida对其进行反编译,那就先脱一下壳,在 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import ma -
BiliBili视频下载工具 -超级好用
2019-07-17 19:46:45目前软件只能下载免费的视频,凡是...关于报毒的问题,软件采用D编写,程序比较大,为了减少体积,使用UPX压缩,如果不放心,可以上传到在线查毒网站检测。 部分分视频没有低分辨率,可以选高一点的分辨率再解析。 -
淘宝试用中心自动申请助手 v2.0.4.zip
2019-07-15 20:39:19软件是试用中心"免费试用" 这一类的自动申请 (当然申请后是否被抽中看你自己的运气了),软件自动会与购买者的淘宝帐号绑定,仅限购买者的淘宝帐号登录使用,非购买者及其他用户无法使用, 注:有些旅游类免费... -
关于应用程序加壳后,IAT钩子失效问题的破解
2016-01-22 15:44:52加壳会使原有的导入表被加密,导致无法直接通过修改导入表来Hook API,如下图, 使用UPX加壳后,计事本程序,的很多项导入表不见了. 此类软件加壳后将导至IAT钩子失效,导致无法完成相应的API HOOK 解决方法一, 强行... -
【reversing.kr逆向之旅】Ransomware的writeup
2018-11-15 21:01:16Exeinfope查到有UPX壳 先使用脱壳机进行脱壳 脱壳后载入IDA 发现直接显示太大无法展示 空格转为文本视图 可以很明显知道 下面红框中的就是一段段花指令 查看最后结束的位置 就在0x0044A775 直接IDC... -
U盘-免疫器 2.0
2009-03-11 19:17:02使用说明: 1.首先选择免疫的目标,可以选择所有本地驱动器,也可以选择指定的盘,比如U盘。 2.然后执行免疫即可。这将在磁盘上建立免疫的目录,此后这个U盘拿到别的机子,即使把自动运行的病毒拷入,也无法激活... -
2019_UNCTF BabyXor
2020-06-04 17:49:25UPolyX v0.5 * 作为菜鸡说实话第一见这种壳,以前都是upx壳,所以先用万能脱壳工具FFI进行脱壳 原谅我这个新手看不懂,所以貌似是无法识别这个壳,那就只能手动脱壳 使用esp脱壳大法,这是今天的一个收获之一 将exe拖到... -
【CTF REVERSE】ctf02-查找字符串
2017-10-17 23:21:00程序加UPX壳,已对壳信息混淆处理,PEiD无法识别出壳信息。 DLL 依赖情况如图所示。 2、思路 程序用IDA查看的时候,因为有壳混淆后是没法跟下去的。这道题比较简单,破解还是常规思路。。。 1)手动脱UP... -
AutoPlay Menu Builder 7.2汉化破解版.rar
2019-09-03 19:46:40你可以使用一个 exe 封装机支持覆盖数据,以减少文件大小,如 UPX 压缩可执行文件。您可以使用 GIF 动画图片作为启动画面和结束画面。选择多个相同类型的控件,你可以改变它们的属性。您可以锁定控制,使他们... -
自定义连发工具生成器
2010-10-20 15:00:03生成时加入对话框由用户自行决定是否用UPX压缩(以往默认使用UPX压缩,所以误报很正常)。 右键菜单加入热键。 1.1.0: 解决在关闭连发的情况下所有按键都不正常的BUG,优化了脚本,效率提高,(请务必更新)。 该BUG... -
饥荒存档自动备份及恢复工具
2014-01-02 14:39:07于是,动手用c++写了一个小程序(使用了:wxWidgets,boost::bind,upx),功能如下: 1、在存档发生变化时(包括:创建新的存档、修改已有存档),自动将存档拷贝到另一目录。(当然啦,这样备份会越来越多,所以... -
饥荒存档自动备份及恢复工具【2014/01/03更新版】
2014-01-03 09:08:23于是,动手用c++写了一个小程序(使用了:wxWidgets,boost::bind,upx),功能如下: 1、在存档发生变化时(包括:创建新的存档、修改已有存档),自动将存档拷贝到另一目录。(当然啦,这样备份会越来越多,所以... -
通用电脑输入法设置工具
2010-10-30 15:43:31IMETool 已经推出有几年了,因为我一向比较懒,没有...答:IMETool 使用 upx 压缩过,一些比较敏感的杀毒软件会报其为加壳程序(注意不是报病毒!),从 2.8.1 版开始,不再使用 upx 压缩主程序。 Silence 2009.8.14 -
FreeRes v0.94
2012-09-04 16:15:48ResTools 系列工具软件也经过 ASPack 压缩),令到 ASPack,UPX 之流的软件大行其道,但国内汉化界所面对的问题却越来越严重,因为被压缩的资源无法正常编辑。而在这时候,相继出现了一部分脱壳工具,收到不错的效果... -
freeRes0.94+注册机
2008-09-20 10:40:21ResTools 系列工具软件也经过 ASPack 压缩),令到 ASPack,UPX 之流的软件大行其道,但国内汉化界所面对的问题却越来越严重,因为被压缩的资源无法正常编辑。而在这时候,相继出现了一部分脱壳工具,收到不错的效果... -
端口复用版winshell编写的后门程序源代码
2008-09-18 03:53:04使用说明: //----------------------------------------------------------------------------------------- --// // WxhShell V1.0 // //-------------------------------------------------------------------...