组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?>
android 使用ollvm混淆so|江阴雨辰互联
- JustNews
首页
- 网站建设
android 使用ollvm混淆so
admin••网站建设•阅读1 使用到的工具 ndk 21.1.6352462(android studio上下载的)cmake 3.10.2.4988404(android studio上下载的&
使用到的工具
- ndk 21.1.6352462(android studio上下载的)
- cmake 3.10.2.4988404(android studio上下载的)
- llvm-9.0.1
- llvm-mingw-20230130-msvcrt-x86_64.zip
- Python 3.11.5
!!!如果不想编译可以直接用我编译好的:ollvm_build
环境配置
添加cmake mingw环境变量如下图:
编译
- 下载好[llvm-9.0.1源码后解压到文件夹新建一个build文件夹
- 在新建的build文件夹下面新建一个空的文本文件并重命名为CMakeLists.txt
- 使用cmd cd到这个build文件夹并执行预编译指令
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ../
- 执行编译命令
mingw32-make.exe -j8
j8:代表开启 8个线程去编译 如果电脑性能好的话可以自行添加如就j16 j32等
- 编译完成如下图
移植到ndk
!!!必须使用自己电脑编译后生成的文件替换
- 复制头文件
将编译出的\obfuscator-llvm-9.0.1\build\lib\clang\9.0.1\include目录下的头文件(__stddef_max_align_t.h、stddef.h、stdarg.h、float),复制
\Android\Sdk\ndk\21.1.6352462\sysroot\usr\include目录下 - 将编译出的\obfuscator-llvm-9.0.1\build\bin目录下的clang.exe、clang++.exe、clang-format.exe文件替换到android_sdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin目录下
混淆使用
在工程中的CMakeLists.txt添加这个配置
#设置llvm debug模式混淆编译
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf" )
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf" )
#设置llvm release模式混淆编译
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf ")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf")
混淆说明
OLLVM 的使用
Instructions Substitution (指令替换)
-mllvm -sub: 启用instructions substitution
-mllvm -sub_loop=3: 对每个函数混淆3次,默认1词
Control Flow Flattening (控制流平坦化)
-mllvm -fla: 启用control flow flattening
-mllvm -split: 启用block切分,提升平展程度
-mllvm -split_num=3: 对每个block混淆3次,默认1词
Bogus Control Flow (虚假控制流)
-mllvm -bcf: 启用 bogus control flow
-mllvm -bcf_loop=3: 对一个函数混淆3次,默认1次
-mllvm -bcf_prob=40: 代码块被混淆的概率是40%,默认30%
-mllvm -sobf: 字符串加密
过程中遇到的坑
- 一直完后编译项目报错:
解决方法:再sdk里面的cmake文件夹中的android.toolchain.cmake文件中添加如下代码后重启AndroidStudio
SET (CMAKE_C_COMPILER_WORKS 1)
SET (CMAKE_CXX_COMPILER_WORKS 1)
- 实测必须使用在本机上编译生成的exe文件替换ndk下面的文件才会生效
发布者:admin,转转请注明出处:http://www.yc00.com/web/1741002400a4289612.html
相关推荐
我们的手机上是会安装有各种应用软件的,这些应用软件有些是购物类、有些是游戏、有些则是浏览器、有些是聊天工具,还有可能是其他的类型。这些应用软件是人们玩手机的主要原因,也是让手
不少小伙伴在下载了sky光遇打开玩的时候,发现游戏的画质非常低,看上去相当模糊,这是怎么回事呢,遇到sky光遇画质模糊怎么办,下面
今天小编来给大家针对这个教大家qq第三方登陆授权失败110401怎么办的解决方法的问题来进行一个介绍,毕竟当下也是有诸多的小伙伴对于教大家qq第三方登陆授权失败110401怎么办的解决方法这个问题非常的重视的&
color os对比miui,下面脚本之家小编将为大家带来一加手机刷Color OS与MIUI系统体验对比评测,感兴趣的朋友可以过来看一看! 一加创始人刘作虎曾在一加发布会上
目的 IP 地址 数据报到达的 IP 的地址。 2)、IP 协议的转发流程 逐跳(hop-by-hop) 数据是从目的设备传输到下一个网络1,又从下一个网络1传输到路由器ÿ
我错了,原来iPad真的能装Windows和macOS系统! 作者:世超 时间:2020-08-28 11:45:56 实不相瞒,
搭建所谓的Linux的过程还是挺简单的,在很久之前我就玩过。不过如今年纪确实也不小了,没了当年那一股冲劲儿,这也属实是一个令人悲伤的事情。 书归正传,能
资源.png 1. QQ同步助手 注: 切勿使用小米手机助手备份 2. 小米官方系统下载地址 安装开发版系统, 找到自己对应的手机型号开发版系统下载, 3. 刷入开发版系统 方法一: 使用小米助手刷机 方法二: 使用adb命令传入文件到手机
问题描述:真机调试时,无法获取到MySQL数据库中的内容。并且真机上的app过一段时间会自己闪退,对应Android studio上报的error错误描述说为获取到数据库数据
问题表现:连接手机与电脑后,驱动安装正确,USB调试模式打开,在DDMS中可以看到device及其进程的信息,但是logcat中就是没有信息输出 问题原
概述 最近从某鱼上掏了一个CM201-1 YS的盒子,动手倒腾倒腾,准备安装Armbian,用来做矿机,但该型号的盒子ophub上面没有完全适配的镜像
Android Studio安装(win10) 一. JDK安装 1. 介绍 JDK的概念相信大家二面时候准备小册子已经很熟悉了,JDK就是 java程序开发的工具包(
Android Studio 开发工具经过Android studio 4.2.1正式版、Android studio 4.2.2正式版、Android studio Arctic Fox 正式版、Android Studio Bumble
1.前言在11.0的系统rom产品开发中,在wifi模块也很重要,但是在某些情况下对于一些wifi连接成功后,确显示已连接成功,但是无法访问互联网 的情况,所以实际上这时可以正常上网的,就是显示的不正常,所以就需要分析连接流程然后解决
SSL连接错误已经逐渐成为Android设备上最常见的问题之一,通常我们会收到提醒“您的连接不是私密的”、“此站点证书不受信任”等等。这些安全提示甚至会出现在最新操作系统或者当前操作系统的最新设备上࿰
情景:连接真机测试; 参考链接:http:jingyan.baiduarticlefea4511a75d627f7ba912540.html1.在工具栏中找到
使用到的工具 ndk 21.1.6352462(android studio上下载的)cmake 3.10.2.4988404(android studio上下载的&
背景 最近在自学Android, 看到WebView这里, 打算做一个简陋的自定义浏览器(其实就是Activity + WebView),并实现点击入口按钮谈出系统提示框,让用户选择程序打开网页功能。刚开始一直都是直接调用系统浏览器打开,
Intent intentnew Intent(Intent.ACTION_VIEW, Uri.parse(url));intent.addCategory(Intent. CATEGORY_BROWSABLE);intent.
【PConline 资讯】5月26日,随着移动设备操作系统Android越来越红火,许多人都希望能在Windows电脑上运行Android程序和游戏。如今,在BlueStac
联系我们
400-800-8888
在线咨询:
QQ交谈
邮件:admin@example.com
工作时间:周一至周五,9:30-18:30,节假日休息
评论列表(0条)