喜德| 叙永| 杭州| 云梦| 临泉| 阳朔| 丰南| 临洮| 克什克腾旗| 长春| 金湾| 南丹| 曲麻莱| 茶陵| 马龙| 沂南| 邵阳市| 郁南| 曲周| 闻喜| 留坝| 吴江| 太白| 让胡路| 雅安| 汉川| 芜湖县| 旺苍| 邵东| 池州| 宁远| 金山屯| 敖汉旗| 和龙| 龙口| 平塘| 芮城| 平房| 南浔| 宜君| 山丹| 丹江口| 孝昌| 响水| 澎湖| 九江市| 兴城| 龙山| 嫩江| 成都| 获嘉| 辽中| 武胜| 花莲| 乳源| 中方| 丹棱| 嵩明| 富川| 莫力达瓦| 南宁| 南昌县| 哈巴河| 库尔勒| 大庆| 翁源| 资阳| 弥渡| 通辽| 蓝田| 柯坪| 合川| 介休| 叶城| 钓鱼岛| 敦煌| 昌乐| 隆林| 兴山| 化德| 平舆| 天祝| 乌达| 相城| 永城| 藁城| 库伦旗| 都安| 呼玛| 铜川| 隆德| 科尔沁右翼前旗| 红原| 洮南| 独山子| 宜宾市| 乳山| 简阳| 鹰手营子矿区| 滕州| 平舆| 遂溪| 武进| 沾化| 仁布| 塘沽| 新巴尔虎左旗| 晴隆| 溆浦| 怀安| 安泽| 岱岳| 新疆| 西安| 镇雄| 分宜| 大余| 枣阳| 马龙| 格尔木| 广宁| 德清| 乌鲁木齐| 民乐| 大洼| 龙泉| 文水| 甘棠镇| 湘潭市| 辉南| 清河| 武隆| 金坛| 番禺| 绥化| 泰宁| 平武| 元谋| 马边| 垦利| 博鳌| 吉首| 尉氏| 益阳| 稻城| 和静| 金州| 来凤| 吉木乃| 锦州| 肇州| 若羌| 祁东| 张家口| 饶平| 赵县| 延川| 大通| 同德| 胶南| 苏州| 焉耆| 姜堰| 扎赉特旗| 巴林右旗| 礼泉| 临安| 光泽| 法库| 乌拉特后旗| 资阳| 鄂温克族自治旗| 林甸| 西固| 长武| 克什克腾旗| 赤水| 苍山| 东川| 高密| 常熟| 阿勒泰| 乐东| 大方| 宁城| 大方| 乌海| 莒县| 五营| 建昌| 韶山| 蔚县| 潮安| 阜阳| 社旗| 水城| 平顺| 绿春| 松滋| 麦盖提| 墨脱| 阜新蒙古族自治县| 墨脱| 富蕴| 南宁| 永州| 建宁| 上林| 西峡| 宜章| 海沧| 永兴| 扎囊| 永年| 铜鼓| 黑山| 楚州| 台州| 库伦旗| 古浪| 铁岭市| 内乡| 盐源| 慈溪| 吉首| 佳木斯| 清河门| 阳信| 新竹市| 忠县| 突泉| 衢州| 老河口| 辉南| 正镶白旗| 本溪市| 五莲| 建昌| 翁牛特旗| 荣成| 钓鱼岛| 尼玛| 乌拉特前旗| 呼图壁| 孟连| 库车| 江华| 东阳| 新会| 富拉尔基| 本溪市| 新河| 江油| 温江| 陈仓| 南宁| 郾城| 多伦| 海兴| 澳门| 阿鲁科尔沁旗| 凌云| 昂昂溪| 鄱阳| 处女星号国际娱乐城

赌博成瘾脑核磁研究新发现 仅英国就300亿市场

2018-04-21 11:55 来源:百度健康

  赌博成瘾脑核磁研究新发现 仅英国就300亿市场

  历史朝代表百科知识为进一步推动全面从严治党向基层延伸,促进基层党组织建设全面进步、全面过硬,按照海淀区委关于做好年度基层党建述职评议考核工作的有关要求,3月13、14日,海淀园工委组织召开了2017年基层党组织书记集中述职评议考核工作会。可说起老年人消费品,大家耳熟能详的品牌又有几个?电视购物节目中那些老年产品你方唱罢我登场,赚了一笔就跑路……老年用品市场蓝海广阔,需要有一批商家踏实打造百年老店,更需要监管部门积极作为,维护老年人权益,让他们享受更优质的晚年生活。

党的十九大报告强调,中国共产党人的初心和使命,就是为中国人民谋幸福,为中华民族谋复兴,并明确提出我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾,这对做好新时代民生工作提出了新的更高要求。原标题:晒党建家底比“红色成绩”  “真没想到,党建述职会议还能这么精彩。

  1956年与范我存结婚,生了四个女儿。现在,鲁家村从原来负债150万到现在集体资产个亿,村民人均收入达到35600元。

  附近学校里面的孩子们肯定也在受煎熬啊!这个排污管道问题什么时候能解决?一名山东网友留言说:“村里没有污水管道,到了夏天废水满街流淌,容易滋生苍蝇和病菌。地市方面,戴彬彬任北京海淀区委副书记,提名区长人选;陈晏任贵州贵阳市委副书记。

“淡季不淡”,正是今年我国旅游市场红红火火的一个缩影。

  (作者单位:浙江省乐清市委组织部)(责编:黄瑾、闫妍)

  进入新时代,继续为伟大复兴奋斗,要求我们党团结带领人民有效应对重大挑战、抵御重大风险、克服重大阻力、解决重大矛盾,进行具有许多新的历史特点的伟大斗争;深入推进党的建设新的伟大工程,确保我们党永葆旺盛生命力和强大战斗力;围绕中国特色社会主义这个改革开放以来党的全部理论和实践的主题,增强“四个自信”,推进伟大事业。新的一年里,我们将坚持以习近平新时代中国特色社会主义思想为指导,不忘初心、牢记使命、扎实工作,一如既往地积极践行网上群众路线,不仅“网上听民生”,更要“网下办实事”,真正把人民群众的小事当作自己的大事来办,努力让全省人民拥有更多的获得感、幸福感、安全感。

  从沈阳到大连再到辽阳……辽宁,这个中国最北端的沿海省份,每天为全省4300多万老百姓办理着民生实事,每一个数字背后,都是热乎乎的民生期待,每一项指标都转化成了老百姓的切身感受。

  纪律能捆得住人的手脚,却清不除人心中的杂草。企业各党组织的书记要落实好抓党建的第一责任,主动适应全面从严治党新常态,统筹推进非公企业党建的各项任务,促进基层建设全面进步、全面过硬。

  兴平市农村信用合作联社理事长李朝晖接受监察调查兴平市农村信用合作联社理事长李朝晖涉嫌严重违法,目前正在接受咸阳市监察委员会的调查,并被采取留置措施。

  迪拜十星级酒店领导干部要勤点鼠标,了解网民意见诉求,更要迈开双腿下基层,了解网上群众的利益所在,要把线上的群众路线和线下的群众路线结合起来。

  村里有没有整改地下水道的计划?“金牛老街道的下水道一直没有修建,居民生活污水直接排放到大街上。从履历看,严植婵、胡文容均系2017年首次当选省委常委,本次调整为两人首次异地任职。

  葡京官方直营 足球博彩网 金沙娱乐

  赌博成瘾脑核磁研究新发现 仅英国就300亿市场

 
责编:

吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2211|回复: 28
上一主题 下一主题

赌博成瘾脑核磁研究新发现 仅英国就300亿市场

  [复制链接]
跳转到指定楼层
楼主
发表于 2018-4-9 14:58 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 NavilleZhang 于 2018-4-10 13:06 编辑

我决定把自留地里的一些文章搬运过来,纯给新手入门使用。稳定的开源混淆请参见 HikariObfuscator/Hikari

99真人 狗年开户行好运 从沈阳到大连再到辽阳……辽宁,这个中国最北端的沿海省份,每天为全省4300多万老百姓办理着民生实事,每一个数字背后,都是热乎乎的民生期待,每一项指标都转化成了老百姓的切身感受。

本文的前置要求: 已阅读 https://www.52pojie.cn/thread-723543-1-1.html  这篇文章包含大量的基础概念。

在正向开发,尤其是单机游戏开发中,开发者常常饱受Cheat-Engine 八门神器类的内存修改器攻击。常见的保护方法是手动做大量的加密解密操作,这会导致无比巨大的人力成本和维护成本,本文将教会你Hack LLVM并使用80行代码来在编译层解决这个问题。

考虑以下的代码:  

static int flag=0;
int main(int argc, char const *argv[]) {
  while(flag<13){
    printf("Flag is %i not 13.Sleeping for another 5 seconds\n",flag);
    sleep(5);
    flag++;
  }
  printf("You've waited for %i seconds. Quite an effort!\n",flag);
  return 0;
}

逻辑非常简单,从0开始循环判断flag值是不是13,如果是就打印信息并退出,否则睡眠5秒钟后继续循环。

使用clang -S -emit-llvm 可获得如下的LLVM IR:  

; ModuleID = 'LLVMConstantEncryptionTest.m'
source_filename = "LLVMConstantEncryptionTest.m"
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.13.0"

home.php?mod=space&uid=383529 = internal global i32 0, align 4
@.str = private unnamed_addr constant [50 x i8] c"Flag is %i not 13.Sleeping for another 5 seconds\0A\00", align 1
@.str.1 = private unnamed_addr constant [48 x i8] c"You've waited for %i seconds. Quite an effort!\0A\00", align 1

; Function Attrs: noinline optnone ssp uwtable
define i32 @main(i32, i8**) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i8**, align 8
  store i32 0, i32* %3, align 4
  store i32 %0, i32* %4, align 4
  store i8** %1, i8*** %5, align 8
  br label %6

; <label>:6:                                      ; preds = %9, %2
  %7 = load i32, i32* @flag, align 4
  %8 = icmp slt i32 %7, 13
  br i1 %8, label %9, label %15

; <label>:9:                                      ; preds = %6
  %10 = load i32, i32* @flag, align 4
  %11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str, i32 0, i32 0), i32 %10)
  %12 = call i32 @"\01_sleep"(i32 5)
  %13 = load i32, i32* @flag, align 4
  %14 = add nsw i32 %13, 1
  store i32 %14, i32* @flag, align 4
  br label %6

; <label>:15:                                     ; preds = %6
  %16 = load i32, i32* @flag, align 4
  %17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.1, i32 0, i32 0), i32 %16)
  ret i32 0
}

declare i32 @printf(i8*, ...) #1

declare i32 @"\01_sleep"(i32) #1

attributes #0 = { noinline optnone ssp uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="penryn" "target-features"="+cx16,+fxsr,+mmx,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6}
!llvm.ident = !{!7}

!0 = !{i32 1, !"Objective-C Version", i32 2}
!1 = !{i32 1, !"Objective-C Image Info Version", i32 0}
!2 = !{i32 1, !"Objective-C Image Info Section", !"__DATA,__objc_imageinfo,regular,no_dead_strip"}
!3 = !{i32 4, !"Objective-C Garbage Collection", i32 0}
!4 = !{i32 1, !"Objective-C Class Properties", i32 64}
!5 = !{i32 1, !"wchar_size", i32 4}
!6 = !{i32 7, !"PIC Level", i32 2}
!7 = !{!"clang version 6.0.0 (trunk 318965) (llvm/trunk 318964)"}

可以看到IR中包含数个LoadInst和StoreInst用于加载和保存新的flag值,我们的设计思路是在加载后XOR解密出正确的数值,在写入前XOR来写入加密的数值

首先我们创建一个基础的Pass骨架:

/*
    LLVM ConstantEncryption Pass
    Copyright (C) 2017 Zhang(http://mayuyu.io.fenshop.com.cn)

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org.fenshop.com.cn/licenses/>.
 */
#include "llvm/IR/Constants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/Obfuscation/Obfuscation.h"// 这是Hikari用的一些全局头文件,自己按照格式创建就好
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
using namespace llvm;
using namespace std;
namespace llvm {
    struct ConstantEncryption : public ModulePass {
        static char ID;
        bool flag;
        ConstantEncryption(bool flag): ModulePass(ID) {
            this->flag=flag;
        }
        ConstantEncryption(): ModulePass(ID) {
            this->flag=true;
        }
        bool runOnModule(Module& M)override {
            return true;
        }
    };
    ModulePass * createConstantEncryptionPass() { return new ConstantEncryption(); }
    ModulePass * createConstantEncryptionPass(bool flag) { return new ConstantEncryption(flag); }
}//namespace llvm
char ConstantEncryption::ID = 0;
INITIALIZE_PASS(ConstantEncryption, "constenc", "Enable ConstantInt GV Encryption.", true,
                true)

注意Pass里的Flag都是用于和我的开源混淆器Hikari对接所设计的接口,您如果自己玩耍并不需要这些。

然后第一步在runOnModule中遍历全局变量列表:

for(auto GV=M.global_begin();GV!=M.global_end();GV++){
              GlobalVariable *GVPtr=&*GV;
}

在这个基本的循环中我们找到了所有的全局变量,对应上述IR中的:

@flag = internal global i32 0, align 4
@.str = private unnamed_addr constant [50 x i8] c"Flag is %i not 13.Sleeping for another 5 seconds\0A\00", align 1
@.str.1 = private unnamed_addr constant [48 x i8] c"You've waited for %i seconds. Quite an effort!\0A\00", align 1

接下来我们需要过滤哪些变量可以加密,哪些不能,由于我们是在编译单个源文件的过程中进行加密,所以我们必须过滤掉可以被其他源文件引用的变量,或者是声明在其他源文件中的变量。 后者通过判断全局变量是否有对应的初始化器(Initializer)来实现,前者通过判断全局变量的链接属性(LinkageType)来实现。
阅读上面的文档:

private
Global values with “private” linkage are only directly accessible by objects in the current module. In particular, linking code into a module with a private global value may cause the private to be renamed as necessary to avoid collisions. Because the symbol is private to the module, all references can be updated. This doesn’t show up in any symbol table in the object file.

这里告诉我们Private(私有)的LinkageType只能被当前源文件引用,这正符合我们上面所分析出的要求。
下面的:  

internal
Similar to private, but the value shows as a local symbol (STB_LOCAL in the case of ELF) in the object file. This corresponds to the notion of the ‘static’ keyword in C.

告诉我们internal(内部)和私有非常相似,对应C语言中的static关键字,同样符合我们的要求。所以我们可以通过以下这行代码来过滤出我们需要的全局变量:

if(GVPtr->hasInitializer()&&(GVPtr->hasPrivateLinkage()||GVPtr->hasInternalLinkage())){

}

最后,我们需要确定全局变量的类型是一个整数,我们上文提到了初始化器(Initializer)的概念,阅读GlobalVariable的文档 可知我们可以通过GlobalVariable::getInitializer() 来获取对应的初始化器,通过阅读LLVM Programmers' Manual 可以了解到LLVM提供三个模版方法来实现运行时类型识别转换,类似C++的RTTI和reinterpret_cast,但性能更快并且强制类型安全。
增加如下代码来判断初始化器的类型:

if(ConstantInt *CI=dyn_cast<ConstantInt>(GVPtr->getInitializer())){

}

常用的为三个模版方法:

  • isa<类>(变量指针) 返回布尔类型,用于做运行时类型审查
  • cast<类>(变量指针)用于将基类转换成派生类,如果不是正确的类型的话会触发一个assert。这个模版方法可以作用于指针和引用上
  • dyn_cast<类>(变量指针) 一个包含了类型检查的类型转换模版方法。如果是正确的类型的话返回新类型的指针,否则返回null。这个模版方法只对指针生效,使用上非常类似C++的dynamic_cast<>

接下来准备Key, LLVM要求类型安全并且并不会像编译器前端一样隐式添加零延伸,因此我们需要根据原来的整数宽度来准备XOR密钥:  

IntegerType* IT=cast<IntegerType>(CI->getType());
uint8_t K=cryptoutils->get_uint8_t();
ConstantInt *XORKey=ConstantInt::get(IT,K);

注意这里的cryptoutils->get_uint8_t(); 是Obfuscator-LLVM提供的密码学安全的随机数生成器,您也可以使用其他方式来生成随机的XOR Key。
接下来有了XOR Key,我们先加密原来的全局变量。可以通过ConstantInt::getZExtValue()来获取原来的常量数值ZExt到uint64_t后的数值:  

ConstantInt *newGVInit=ConstantInt::get(IT,CI->getZExtValue()^K); // 计算加密后的值并创建新的初始化器
GVPtr->setInitializer(newGVInit); // 将初始化器的值赋值给全局变量

接下来我们通过遍历这个全局变量的声明-使用链来找到所有引用了这个变量的指令并对LoadInst和StoreInst做正确的处理

  • 声明-使用链 即Def-Use Chain,给定一个变量,找到所有引用处
  • 使用-声明链 即Use-Def Chain,给定一个引用,找到所有可能的变量。
  for(User *U : GVPtr->users()){
     if(LoadInst *LI=dyn_cast<LoadInst>(U)){
                   Instruction* XORInst=BinaryOperator::CreateXor(XORKey,XORKey);
                      XORInst->insertAfter(LI);
                      LI->replaceAllUsesWith(XORInst);
                      XORInst->setOperand(0,LI);

                    }else if(StoreInst *SI=dyn_cast<StoreInst>(U)){
                      Instruction* XORInst=BinaryOperator::CreateXor(SI->getValueOperand(),XORKey);
                      XORInst->insertBefore(SI);
                      SI->replaceUsesOfWith(SI->getValueOperand(),XORInst);
                    }
}

在LoadInst的处理块中,我们先创建了一个没有任何卵用的XOR指令占位并插入到原来的Load指令之后,将后续对原始LoadInst的指令替换到我们的占位指令中。因为直接使用正确的左值LI来创建会导致后续的replaceAllUsesWith将我们的XOR指令的左值引用也替换成对自身的引用。最后将我们的占位XOR指令左值指向正确的LoadInst

在对StoreInst的处理块中,我们同样创建了一个新的XOR指令,左值为原来的StoreInst所要保存的数值,右值为一开始我们创建的XOR Key,将这个指令插入到Store指令之前,并将原来的Store指令对未加密数值的引用替换成我们加密之后的结果。

然后就完工啦,完整代码如下。注意有一些小细节我们的示例用代码没有处理,处理这些情况就留做给读者的练习了:  

/*
    LLVM ConstantEncryption Pass
    Copyright (C) 2017 Zhang(http://mayuyu.io.fenshop.com.cn)

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org.fenshop.com.cn/licenses/>.
 */
#include "llvm/IR/Constants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
#include "llvm/Transforms/Obfuscation/Obfuscation.h"// 这是Hikari用的一些全局头文件,自己按照格式创建就好
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
using namespace llvm;
using namespace std;
namespace llvm {
    struct ConstantEncryption : public ModulePass {
        static char ID;
        bool flag;
        ConstantEncryption(bool flag): ModulePass(ID) {
            this->flag=flag;
        }
        ConstantEncryption(): ModulePass(ID) {
            this->flag=true;
        }
        bool runOnModule(Module& M)override {
            for(auto GV=M.global_begin();GV!=M.global_end();GV++){
              GlobalVariable *GVPtr=&*GV;
              //Filter out GVs that could potentially be referenced outside of current TU
              if(GVPtr->hasInitializer()&&(GVPtr->hasPrivateLinkage()||GVPtr->hasInternalLinkage())){
                if(ConstantInt *CI=dyn_cast<ConstantInt>(GVPtr->getInitializer())){
                  //Prepare Types and Keys
                  IntegerType* IT=cast<IntegerType>(CI->getType());
                  uint8_t K=cryptoutils->get_uint8_t();
                  ConstantInt *XORKey=ConstantInt::get(IT,K);
                  //Encrypt Original GV
                  ConstantInt *newGVInit=ConstantInt::get(IT,CI->getZExtValue()^K);
                  GVPtr->setInitializer(newGVInit);
                  for(User *U : GVPtr->users()){
                    if(LoadInst *LI=dyn_cast<LoadInst>(U)){
                      // This is dummy Instruction so we can use replaceAllUsesWith
                      // without having to hand-craft our own implementation
                      // We will relace LHS later
                      Instruction* XORInst=BinaryOperator::CreateXor(XORKey,XORKey);
                      XORInst->insertAfter(LI);
                      LI->replaceAllUsesWith(XORInst);
                      XORInst->setOperand(0,LI);

                    }else if(StoreInst *SI=dyn_cast<StoreInst>(U)){
                      Instruction* XORInst=BinaryOperator::CreateXor(SI->getValueOperand(),XORKey);
                      XORInst->insertBefore(SI);
                      SI->replaceUsesOfWith(SI->getValueOperand(),XORInst);
                    }
                  }
                }
              }
            }
            return true;
        }
    };
    ModulePass * createConstantEncryptionPass() { return new ConstantEncryption(); }
    ModulePass * createConstantEncryptionPass(bool flag) { return new ConstantEncryption(flag); }
}//namespace llvm
char ConstantEncryption::ID = 0;
INITIALIZE_PASS(ConstantEncryption, "constenc", "Enable ConstantInt GV Encryption.", true,
                true)

使用我们刚刚写的Pass加固开头的程序后的F5
3EF146BC-75D1-4919-AD12-71584D060CA5|690x220





免费评分

参与人数 19吾爱币 +18 热心值 +18 收起 理由
siuhoapdou + 1 + 1 谢谢@Thanks!
Asia_RuBy + 1 用心讨论,共获提升!
sunnylds7 + 1 + 1 谢谢@Thanks!
cjhm + 1 + 1 感谢张总的分享!
人世沉浮丶 + 1 + 1 用心讨论,共获提升!
C-ARan + 1 热心回复!
lzhhshuai + 1 + 1 热心回复!
ch2r9n + 1 + 1 谢谢@Thanks!
羽月莉音 + 1 + 1 谢谢@Thanks!
dibh10 + 1 + 1 用心讨论,共获提升!
jixun66 + 1 + 1 感谢作者,希望有更多 LLVM 相关内容。
Ink + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
chenjingyes + 1 + 1 谢谢楼主分享,希望继续更新
Vsir + 1 + 1 谢谢@Thanks!
wmsuper + 1 + 1 用心讨论,共获提升!
福仔 + 1 + 1 用心讨论,共获提升!
wushaominkk + 1 + 1 我很赞同!
gamingnow + 1 + 1 用心讨论,共获提升!
Ravey + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
 楼主| 发表于 2018-4-10 08:21 | 只看该作者 |楼主
princemach 发表于 2018-4-10 07:58
以通过ConstantInt::getZExtValue()来获取原来的常量数值ZExt到uint64_t后的数值:这个什么意思

以0补齐高位。比如说原来是0000 0001,高位补0延伸到比如说0000 0000 0000 0001
英文叫Zero Extend,中文我不太确定翻译成啥就没翻译了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
 楼主| 发表于 2018-4-9 17:46 | 只看该作者 |楼主
本帖最后由 NavilleZhang 于 2018-4-9 17:47 编辑
Ganlv 发表于 2018-4-9 17:40
我在想,楼主要不要再发一个破解教程呢?

我没接触过 LLVM,不知道这个想法可不可以,在解密触发之后在 ...

可以的。所以一般这东西我都建议配合其他混淆使用。参见开头我的开源工程HikariObfuscator

这里 有一个早期的混淆demo

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

板凳
发表于 2018-4-9 15:45 | 只看该作者

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

报纸
发表于 2018-4-9 15:49 | 只看该作者
支持大神...

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

地板
发表于 2018-4-9 16:03 | 只看该作者
支持一个,感谢分享!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

7#
发表于 2018-4-9 16:16 | 只看该作者
膜拜大神!!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

8#
发表于 2018-4-9 17:40 | 只看该作者
我在想,楼主要不要再发一个破解教程呢?

我没接触过 LLVM,不知道这个想法可不可以,在解密触发之后在调试器中输出指令地址和解密之后的数据,然后再根据调试器的Log来定位到原始的常量处,进行适当的修改。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

9#
发表于 2018-4-9 18:22 来自手机 | 只看该作者
感谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

10#
发表于 2018-4-9 20:40 | 只看该作者
天天向上

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

11#
发表于 2018-4-10 00:26 | 只看该作者
干货满满,不错

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2018-4-19 13:33

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
卖早餐加盟 早点加盟店10大品牌 早餐连锁店加盟 早点加盟店排行榜 双合成早餐加盟
卖早餐加盟 养生早餐加盟 必胜客加盟费及加盟条件 连锁店加盟 品牌早餐店加盟
湖北早点加盟 加盟包子 早点快餐加盟店 早点 加盟 营养粥加盟
连锁店加盟 早点小吃加盟排行榜 早点加盟多少钱 连锁早餐加盟 早餐粥加盟
百度