霍山| 长白山| 蒲江| 高县| 措美| 温宿| 屏东| 襄城| 鄂州| 桓仁| 盖州| 保定| 新荣| 桑日| 吉利| 米林| 尤溪| 班玛| 夹江| 蒙阴| 科尔沁左翼后旗| 沈阳| 石家庄| 台安| 孟津| 钓鱼岛| 科尔沁右翼中旗| 阳东| 博山| 太谷| 渭南| 合江| 太康| 石门| 武宣| 余庆| 南丹| 高阳| 永福| 喜德| 黑山| 扬中| 佳县| 商丘| 河北| 凤翔| 泰宁| 苏家屯| 临安| 崂山| 吉木萨尔| 莘县| 陆川| 宁河| 费县| 恭城| 寿光| 古田| 遂溪| 枣庄| 呼伦贝尔| 曾母暗沙| 凉城| 临夏市| 新巴尔虎左旗| 黄山区| 南平| 开化| 灵山| 建宁| 郁南| 玛多| 正宁| 密山| 蔚县| 连城| 石景山| 庄浪| 满洲里| 澳门| 桐城| 昌都| 宜黄| 天长| 合阳| 阳山| 普定| 阿图什| 湟源| 苏尼特左旗| 泽普| 溧阳| 歙县| 普宁| 陕西| 兴义| 亳州| 浮山| 敖汉旗| 藁城| 永丰| 滦平| 札达| 屏东| 台北县| 彭水| 通榆| 修武| 华阴| 麻阳| 南木林| 潘集| 沁县| 广德| 夏邑| 天祝| 确山| 玛沁| 杂多| 麦积| 丰南| 太谷| 东至| 绥江| 大方| 定陶| 浏阳| 鸡泽| 合江| 徽州| 积石山| 瑞金| 太仓| 社旗| 沛县| 杜尔伯特| 横峰| 周至| 茂港| 北戴河| 玉龙| 莘县| 滴道| 六合| 武鸣| 阿坝| 阿荣旗| 大连| 富拉尔基| 墨脱| 凌海| 江西| 共和| 黟县| 孟连| 长白山| 尤溪| 胶州| 太谷| 阿勒泰| 陆良| 山阴| 汤旺河| 白银| 昌宁| 本溪满族自治县| 铜梁| 茶陵| 文水| 萍乡| 汾阳| 桃园| 霍山| 泗阳| 措勤| 开远| 瑞安| 兴文| 都江堰| 麻栗坡| 昆山| 金昌| 日照| 江门| 淳化| 武都| 眉山| 乌审旗| 屏东| 达拉特旗| 大龙山镇| 乌拉特前旗| 寿宁| 漾濞| 金州| 泸州| 六枝| 兰坪| 涟源| 丹江口| 汾西| 镇江| 西盟| 隆安| 秭归| 张湾镇| 沁源| 沾益| 辰溪| 滑县| 曲麻莱| 阿荣旗| 乐山| 浏阳| 鄄城| 莱西| 来安| 阳西| 社旗| 吉木乃| 本溪市| 屯留| 霍城| 内蒙古| 仲巴| 华亭| 上林| 永和| 杂多| 边坝| 扎赉特旗| 鹤壁| 阜平| 资溪| 长宁| 新晃| 来宾| 召陵| 宁县| 西乡| 贵港| 莒南| 五营| 东阿| 华容| 离石| 临川| 凉城| 肥乡| 翠峦| 乌拉特前旗| 措美| 王益| 福清| 天水| 高阳| 曲周| 盐池| 东川| 江都| 留坝| 常山| 濉溪| 合川| 推牌九游戏

甸中镇

2018-04-24 05:28 来源:秦皇岛

  甸中镇

  大赢家软件下载陈一新说,过去我是武汉和武汉人民的“一号打工仔”,今后我还要当武汉得力的“啦啦队员”,为大武汉的复兴呼吁,为武汉人民的创造喝彩。Dhahab拥有3间设施完善的船舱(1间大床舱2间双人床舱),最多可容纳6名宾客。

唯有一种办法可以抑制房价,在转让环节收重税。由于进山线路极其艰险漫长,当地牧民也很少接近,但无疑,每一个走过狼塔线的人都是无与伦比的勇者。

  △八里庄这个决定,如同当年旧城轰塌的一声巨响。实现伟大城市梦想要一张蓝图干到底以长江新城为抓手,努力打造国家中心城市和世界亮点城市,加快建设现代化、国际化、生态化大武汉,全面复兴大武汉,是武汉的伟大城市梦想。

  B提问:开发商没签公积金按揭协议的原因有哪些?1、销售楼幢所在土地已设抵押;2、销售楼幢的土地用途为商业办公;3、销售房产为独幢、类独幢或联排住宅等情况。这篇自传体小说描述了生活在农村且患有脑瘫的女性周玉,是一个被几乎所有人漠视,被整个社会抛弃的人。

公告称,继三亚海棠湾恒大养生谷和海花岛澜湾恒大养生谷之后,西安、郑州、扬中、湘潭、云台山养生谷均已落地,2017年已招募1585名会员,养生谷会员及各项收入超13亿元。

  “除了增加供给弹性,还应实施更加包容的住房政策,把2亿多流动人口明确纳入住房政策框架”,左晖表示,在城市圈发展的新阶段,中心城市的流动人口有可能跟随产业的转移进入周边城市或其它城市,某种程度上,住有所居问题主要是这部分人的问题。

  在此之前,户籍家庭申请公租房的门槛为年人均可支配收入不高于20663元,新《细则》将这一数字提高了8771元,根据新《细则》,年人均可支配收入不高于29434元的户籍家庭均可申请公租房,扩大了公租房的保障范围。而在生活中,他则是一位沉稳儒雅的绅士,自律自省,作风老派的老干部。

  船上另有厨师烹饪课程、定制潜水游和随行水疗师等。

  同时,主动将战略新兴、大健康、大消费等潜力行业列入授信重点方向,对契合区域发展特点的新材料、新能源、生物医药等行业逐步加大扶持力度,同时积极支持深圳地区具有良好发展潜力的高新科技企业及重点项目发展。银海女神号亚太航线将于2019年2月2日正式启航,这两大广受赞誉的奢华品牌还将联合打造多条以亚洲城市为主的邮轮航线。

  即使同梅毒一样,现在发明了六百零六,肉体上的病,既可医治;我希望也有一种七百零七的药,可以医治思想上的病。

  湖北快3重点对医院、学校、重点企业、繁华商业区等公共场所交通改善研究项目,着手区人民医院、妇幼保健院中心区新院、中医院、宝城71-72区九年制学校(在建)、宝城39区九年制学校(在建)、西湾小学、海湾中学等片区交通规划研究项目。

  此外,成都“成品房政策”出炉,对住宅提出了更高标准,中国金茂的科技理念将不断创新、再优化,同时,建立在金茂成熟的高端酒店运营经验上,金茂府对物业服务、社群打造也更加细化。徒步,对于许多人来说,那是遥不可及的向往,因为我们总是没有迈出那一步的勇气。

  bet36体育投注官网 威尼斯人网站可信 现金网注册送白菜

  甸中镇

 
责编:

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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

甸中镇

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

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

云顶赌场网址 以北上广深为代表的大城市、特大城市也在不断崛起。

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

快速回复 返回顶部 返回列表
安徽早餐加盟 春光早餐工程加盟 早点来早餐加盟 早点加盟连锁店 上海早餐车加盟
早餐连锁店 早餐粥店加盟 上海早餐车加盟 加盟早点车 娘家早点车怎么加盟
早点小吃加盟连锁 早餐馅饼加盟 清真早餐加盟 春光早点加盟 天津早餐加盟
正宗早点加盟 美式早餐加盟 双合成早餐加盟 爱心早餐加盟 早点连锁加盟店
百度