罗平| 南召| 崇州| 四子王旗| 科尔沁左翼中旗| 囊谦| 建湖| 临泉| 屯留| 宜黄| 新宾| 辽阳县| 泗县| 云阳| 江宁| 张家界| 临夏县| 长海| 耒阳| 汤阴| 冕宁| 山东| 天峨| 基隆| 环江| 美溪| 井冈山| 彭山| 达尔罕茂明安联合旗| 旺苍| 南芬| 台江| 壤塘| 偃师| 衡阳县| 富源| 广平| 进贤| 长葛| 中山| 海口| 睢宁| 平塘| 庄河| 张家口| 建瓯| 洛宁| 潜江| 忻州| 康县| 即墨| 迭部| 汉中| 和平| 尤溪| 湄潭| 岗巴| 潍坊| 冀州| 嵩明| 正阳| 黄山区| 卓资| 旺苍| 石台| 友谊| 新蔡| 桐城| 赞皇| 琼结| 会泽| 郓城| 介休| 武强| 绛县| 双峰| 左云| 明水| 南木林| 雅江| 方正| 江山| 蔡甸| 环县| 安达| 赤水| 铁山| 灵宝| 镇江| 泾川| 隰县| 黑山| 名山| 新竹县| 光泽| 封丘| 丹棱| 嘉禾| 刚察| 称多| 江川| 九江市| 苏家屯| 新密| 辽宁| 武都| 五通桥| 林州| 潞西| 香河| 阳城| 双江| 平凉| 十堰| 昔阳| 雄县| 沛县| 兰州| 李沧| 洪湖| 西乡| 明光| 田林| 通化县| 金门| 洪湖| 上海| 石渠| 大余| 新密| 铁岭市| 象州| 祥云| 大连| 深泽| 藁城| 莲花| 灵川| 云浮| 临颍| 白银| 巴马| 滦县| 科尔沁右翼中旗| 喜德| 缙云| 弓长岭| 君山| 祁连| 霍邱| 新竹市| 保山| 内乡| 驻马店| 苍南| 曲松| 微山| 繁峙| 常德| 武邑| 盘山| 睢宁| 托里| 索县| 房山| 大姚| 镇远| 蓬安| 乡城| 高密| 久治| 布拖| 调兵山| 恒山| 凤凰| 肇州| 蠡县| 高阳| 旬阳| 丹阳| 漾濞| 虎林| 梓潼| 长兴| 梓潼| 巴林左旗| 滦平| 临邑| 礼县| 宕昌| 连云区| 成都| 泗阳| 彰化| 巴青| 雄县| 漳州| 台湾| 阿勒泰| 定襄| 青白江| 昂仁| 樟树| 苏州| 浦口| 古冶| 巴林右旗| 高邮| 郁南| 宁陕| 大同县| 辉县| 天全| 和硕| 安多| 叶县| 儋州| 扶余| 广平| 霍邱| 景德镇| 晴隆| 顺平| 津南| 井研| 费县| 前郭尔罗斯| 眉县| 莲花| 屏东| 屯留| 阿图什| 赤城| 越西| 绥中| 甘谷| 盐边| 乌恰| 岑溪| 常山| 尼玛| 通州| 新平| 威远| 德钦| 蔡甸| 汤阴| 哈巴河| 宜春| 魏县| 青冈| 南芬| 久治| 东丽| 长宁| 汾西| 太谷| 北流| 定州| 仁怀| 柘城| 衡阳县| 鄂温克族自治旗| 宣汉| 果博东方在线娱乐

云盖寺镇

2018-04-24 18:14 来源:今晚报

  云盖寺镇

  新太阳城(好)园内分赏樱区、玩樱区、养樱区、集散区四大功能区。湖南赏樱最佳胜地当属省森林植物园。

1月5日晚上,泰州泰兴黄桥发生一起悲剧,因9岁(实则8周岁)儿子犯错,母亲在教育孩子时失手将其打死。(新华社)

  不过它威武的身姿并没有什么震慑作用,视频中可以听到有人高呼小心,但是也能看到,一位女士走近了在拍摄,距离野猪只有两三米,一点儿没给野猪面子。孙进透露,今年雨中可能会增加5-10名化学学科特长生名额。

  长沙首个项目的面积约为万平方米,以欧洲小镇街头元素、创意潮玩的市集、社区生活配套等为轴,同时容纳了时尚百货、全新体验型生活超市、童趣世界、特色餐饮、创意市集等功能,填补了武广新城商圈的社区商业空白。近年来,湖南省大力实施创新引领开放崛起战略,一大批湘企在海外落地开花,许多外籍客商来湘投资,出境游人数也年年递增,不断刷新历史纪录。

党的十九大报告指出,当代中国共产党人和中国人民应该而且一定能够担负起新的文化使命,在实践创造中进行文化创造,在历史进步中实现文化进步。

  2018年在保持招生管理、招生学校批次等不变的前提下,南京市高中阶段学校招生采用统招生实行平行志愿的录取方式。

  依法批捕孩子爸表示谅解案件移送检察院审查逮捕后,检察官听取孩子父亲意见。62月14日15时,衡阳常宁市公安局交警大队事故处理中队长李乾阳带领民警张春辉等人在S214线罗桥镇双周村地段处理一起交通事故时,遭到当地村民吕某柏、贺某红等多人的暴力阻拦。

  在协作重点内容上,上述办法提出,从临床入手,针对协作病种发生、发展过程中的某一阶段、关键环节,开展中西医协作联合攻关,挖掘整理中医药治疗经验和特色疗法,提炼临床经验,对诊疗方案的临床实施进行动态管理,强化对临床病例资料的分析、总结与评估,建立中西医结合疗效评价标准,形成独具特色的中西医结合诊疗方案或专家共识。

  党的十九大报告指出,当代中国共产党人和中国人民应该而且一定能够担负起新的文化使命,在实践创造中进行文化创造,在历史进步中实现文化进步。二是部分特定需求难以得到满足。

  27年前,黄进岩从部队转业到省高院离退办,做好机关老干部工作,也是为法院审判事业做贡献。

  云顶赌场网址浙江大学城市学院副教授韩明清建议,规范共享单车,要从顶层设计规划城市交通。

  此外,芙蓉北路与福元西路交会处再往北,围绕一些住宅项目及中南林科大涉外学院也有多个小型商业项目在建或进入招商阶段。一方面,参加杯赛只是家长们给孩子报培训班的原因之一;只要考试还在,家长就希望孩子能多学一点,考个好分数。

  新罗娱乐 365体育备用网址 棋牌游戏大厅

  云盖寺镇

 
责编:

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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

云盖寺镇

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

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

365bet网上娱乐 虽然题目不难,但是题量还是蛮大的,没做完。

本文的前置要求: 已阅读 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.sjzjws.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.sjzjws.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.sjzjws.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.sjzjws.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.

快速回复 返回顶部 返回列表
广式早餐加盟 加盟早点车 双合成早餐加盟 早餐加盟项目 早龙早餐加盟
天津早点小吃培训加盟 早餐类加盟 中式早餐加盟 早餐 加盟 豆浆早餐加盟
早餐加盟排行榜 北京早点小吃加盟店 早餐加盟项目 特色早点小吃加盟店 早餐馅饼加盟
书店加盟 上海早点加盟 早餐店加盟哪家好 早点来早餐加盟 新尚早餐加盟
百度