精华内容
下载资源
问答
  • PHPJiaMi 加密分析及手工解密过程

    千次阅读 2018-08-14 09:23:19
    解密准备 首先我们来了解一下 PHPJiami 原理: 加密流程:源码 -&... 加密程序成品,再简单的说:源码 + 加密外壳 == 加密程序 这里演示,我写了 phpinfo() 然后去http://www.phpjiami.com/ ...

    解密准备

    首先我们来了解一下 PHPJiami 原理:

    加密流程:源码 -> 加密处理(压缩,替换,BASE64,转义)-> 安全处理(验证文件 MD5 值,限制 IP、限域名、限时间、防破解、防命令行调试)-> 加密程序成品,再简单的说:源码 + 加密外壳 == 加密程序

    这里做演示,我写了 phpinfo() 然后去
    http://www.phpjiami.com/ 生成加密文件,打开之后,果然都是一片乱码。
    使用代码修复工具 http://zhaoyuanma.com/phpcodefix.html 将 ascii 不可见字符的变量修复成正常的变量名,再 PHP 代码美化,方便下一步分析。

    0x02 函数分析

    代码内有三个函数,由于每次加密这三个函数的顺序都不一样,这个以传参方式区分这三个函数
    fun1 = ($var1, $var2 = '') = 核心函数,将乱码转成正常字符串
    fun2 = (&$var1, $var2) = 校验 IP、域名,防止被破解。最后一句是解密整个 php 文件
    fun3 = ($var1) = 将需要用到的函数赋值给 N 个全局变量

    先从 fun1 开始逆起,在编辑器中双击变量名,该变量高亮之后,可以看到它怎么变化,在哪里被使用。
    一句句语句逆下去,发现有语法错误,其实是代码修复后的 bug,用 winhex 打开定位到这句代码,发现是三元运算符

    $var2 = !$var2 ? ord('乱码') : $var2;

    接下来是一句很奇怪很无用的代码,再下一句是 for 循环,我猜测是给 $i 赋值

    for($i=0; $i<strlen($var1); $i++)

    下个 for 循环里又是一个三元运算符,手动修复后,基本 fun1 的代码就出来。
    接下来就是运行 fun1 函数,但是碰到个坑点,fun1 有很多处用到乱码做运算,而乱码不能直接拷到编辑器中。
    用 winhex 将 16 进制的乱码字符复制出来,在运算的时候 pack("H*","乱码") 将它还原回乱码即可。

    function fun1($var1, $var2 = '')
    {
        $md5 = md5(pack("H*",'FBE3FCFAF9E0'));//乱码随机字符串1
        $var2 = !$var2?ord(pack("H*",'8C')):$var2;//乱码随机字符串2
        
        $str = '';
        for($i=0; $i<strlen($var1); $i++)
        {
            $str .= ord($var1{$i}) < ord(pack("H*",'F5')) ? ((ord($var1{$i}) > $var2 && ord($var1{$i}) < ord(pack("H*",'F5'))) ? chr(ord($var1{$i}) / 2) : $var1{$i}) : '';
        }
        $de1 =  base64_decode($str);
        $len = $len2 = strlen($md5);
        $str2 = '';
        for($i=0; $i<strlen($de1); $i++)
        {
            $len = $len ? $len : $len2;
            $len--;
            $str2 .= $de1[$i] ^ $md5[$len];
        }
        return $str2;
    }

    接着开始还原 fun2 代码,fun2 中前面都调用了 fun1 解密字符串,解密可得到 fun2 后面需要用到的函数名。有了 fun1,后面解密都非常顺利

    function fun2(&$var1, $var2)
    {
        $de = str_rot13(strrev(gzuncompress(stripslashes(fun1(pack('H*','8ECA349A37A639E43946ACE4B242F4EED8E8A0CC4444E639E894C2C69CB0384134EEEEC6CA3233B433ECD89CC6D435A437CE98B0D2A092909E96D030EE8EA2A4D044CADCA2DC32CCE02BAADCEEEA4537D8ACB43298F238E0428EC29646A0CAA2EECA43D2B2C442F4C4358E46429434AE44B0DACAF0AE4190C845EE32AE34C82BC49494E22BCAA49CD6D2E8CA94D2D4A6329C929A3596F2CC36CCD6CCAAF0C646D0A69EC8F02FA2A03938D234C2D2E0DCCCCAC4A8A631AC4238C4A490ECD4CCF0DAF4CAB2'))))));
        $exp = explode(',', $de);
        $var1 = $exp[$var2];
    }

    $de 解出来是一堆函数名,然后赋值给全局变量,后面解密都需要用到。fun2 解出来是固定的字符串

    ,chr,addslashes,rand,gzuncompress,assert_options,assert,file_exists,file_get_contents,substr,unpack,constant,strpos,create_function,str_rot13,md5,set_include_path,dirname,preg_replace,base64_encode,base64_decode,

    接着暂且先不看 fun3,回到主代码中。
    2265835617.png这里创建了一堆全局变量,通过 fun2 赋值,每个变量都代表一个函数名
    1848056089.png接着还原 fun3 函数,步骤一样。

    function fun3()
    {
        php_sapi_name() == 'cli' ? die():'';
        $file = file_get_contents(__FILE__);
        if(!isset($_SERVER['HTTP_HOST']) && !isset($_SERVER['SERVER_ADDR']) && !isset($_SERVER['REMOTE_ADDR']))
        {
            die();
        }
        $time = microtime(true) * 1000;
        if(microtime(true) * 1000 - $time > 100)
        {
            die();
        }
        if(strpos(__FILE__, gtmclaei) !== 0){$exitfunc();}
        !strpos(de1(substr($file, de1('A8414145'), de1('A841AA3D'))), md5(substr($file, de1('AAA23D3D'), de1('A8414190')))) ? unkonw1() : unkonw2();
        $loc1 = fun1('A841AA45ACEE3D3D');
        $loc1 = fun1('A8414190');
        $de = str_rot13(gzuncompress(fun1(substr($file, $loc1, $loc2))));//核心解密
        return $de;
    }

    后面的代码已经不用再看了,fun2 解出来的就是解密后的原代码。
    3757017134.png

    展开全文
  • 工程师文化成功一个最佳实践就是自动化一切,但往往事情落到自己身上,有时又不断后退后退到不能再退时候才想起来要实现自动化,尤其这件事情手工做一次又不算太复杂情况。 比如最近,团队张罗着云主机...

    最近一次性能测试自动化脚本过程思考

    我不记得跟我的客户提过多少次,DevOps&工程师文化成功的一个最佳实践就是自动化一切,但往往事情落到自己身上,有时又不断后退后退到不能再退的时候才想起来要实现自动化,尤其这件事情手工做一次又不算太复杂的情况。

    比如最近,团队张罗着做云主机的性能测试这件事情,大多数的反馈就是用 Sysbench 跑下,本身脚本很简单,起个机器啥的技术上也没啥含量,人工完成几个机型的测试,对于个人来说,不会有大多工作量;

    那需求来了:

    • 如果需要测试多家云厂商,工作量直接跟覆盖的云厂商成正比

    • 测试机型的数量受到小组人力资源数量限制

    • 云主机是不断迭代更新的,后续怎么保障性能数据持续更新?

    • 如果客户需要测试方法,提供什么方案给客户?

    • 测试结果分析能否自动化对比产生报告?

    怎么办?再来一遍~~~[图片上传失败…(image-cf0a07-1587539157911)]

    单机测试的简单与重复

    跑 Sysbench 虚机性能测试有多简单呢?参考如下脚本:

    sysbench --time=20 --threads=4 --report-interval=5 cpu runsysbench --threads=2 memory run
    

    再加上 Sysbench 安装呢?也两行 Shell 搞定:

    # For Unbuntu Linuxcurl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bashsudo apt -y install sysbench
    

    那我们回到单机测试,需要做哪几个步骤来完成?

    1. 根据规格参数启动一个云主机,比如相应的操作系统,实例类型和大小

    2. 登陆云主机

    3. 安装测试工具,并跑测试命令

    4. 等测试结束,保存测试结果

    5. 关闭云主机

    我相信这个任务交给一个小组成员,完成几个不同机型的测试,一般还是非常欣然的接受的。

    如果测试任务输入变量有变化的时候,这个时候多人协作做重复的事情,效率还是蛮高的:

    • 测试的云厂商数量变多

    • 测试方法增加

    • 测试机型增加

    image

    image

    人工重复劳动到全自动化脚本之路

    什么阻碍了大家第一时间去实现自动化?我想到几个阻碍我自己的:

    • 该事情本身手工不复杂

    • 自动化的代码工作量超过该事情简单的一次手工操作

    • 偷懒

    就比如云主机性能测试这个任务来说,哪怕一次测试 3个云厂商,涉及 10个机型,总计 30次手工任务,如果仅仅执行 Sysbench 测试,相对每次执行时间短,出结果快,每次任务假设 30分钟,顺序做完,总计需要 30 x 30 = 900 分钟 = 15 小时,再偷懒,一个人一个正常的工作周(每天3个小时)就可以完成,这中间还有些手工操作并行优化的空间。

    自动化这个任务有多复杂呢?

    首先,有大量的单机类性能测试要求,远远不止 CPU/内存这一类,哪怕就这个领域,类似 Sysbench 这样的 CPU 性能测试工具和不同测试用例就有若干种,比如 geekbench,bonnie++,namd,x264/x265,7-zip,openssl,povray 等等;延伸开来,比如内存,磁盘,数据库等等,就会有更多的测试用例,要覆盖如此多的测试需求,哪怕安装和测试命令再简单也要重复无数次啊;哪有没有一个 All-in-One 的框架呢?后来就发现在 AWS 白皮书里面提到一个 Phoronix Test Suite 框架,该框架很有意思底层用 PHP,包装了很多测试用例,比如所有针对 Linux 操作系统的测试用例,直接一行命令解决:

    ./phoronix-test-suite batch-benchmark pts/linux
    

    研究到这里,核心的测试脚本基本搞定,剩下的一个小问题就是,如何把测试结果统一保存到一个集中的地方?因此对象存储桶就是一个完美的选择,任何可以访问互联网的机器,都可以比如借助 S3 命令行,把测试结果(通常是文本或json格式文件)上传到一起。

    也就是说,对于某种特定的操作系统,我们利用类似 phoronix-test-suite 这样的工具可以只生成一个测试脚本;

    其次,测试脚本有了,剩下的任务就是自动化启动虚机,并找到一个合适的方式远程执行该测试脚本。

    这就是前面提到的,单机测试任务的支撑域要求,这部分比测试脚本本身的代码量要大,只有在云上才能比较容易实现这样的基础设施即代码,因为云API 是新的IT基础设施,需求里面提到我们要能测试不同的云厂商的云主机,最好的一个办法就是找到一个统一的方法可以支持多家云的自动化任务。

    在我的实验里面,很容易就选择了 Terraform,因为以前用过,而且支持所有主流云平台;

    启动一台云主机,最简单的方法是,所有的参数都默认,这样通常该主机会放置在默认的 VPC的一个公有子网中,可以访问互联网,各自平台的差异点在于,主机的机型类别,操作系统镜像,磁盘类型等等。

    自动执行测试脚本的方法每家云厂商可能有些差异,比如 AWS 就可以将脚本注入到 User Data,在机器启动后即可自动执行,其他主流云平台虚机通常都支持 cloud-init 在主机启动后执行相应的脚本代码亦或者利用 SSH 远程登录并执行指定的脚本。

    最后,就是完全自动化销毁所创建的测试资源,这里遇到一个难题就是测试脚本或虚机如何通知脚本已经成功执行完成?简化策略就是要求所有测试在 6个小时结束,启动后6个小时,利用 Terraform 命令一键销毁所有的资源。

    image

    架构扩展性及效果

    自动化之后,跑一个测试就简化成如下一次调用,以 AWS 实例为例,输入参数为区域,机型以及AMI ID,还有一个必要的参数是最后结果保存的 S3 存储桶名:

    launchPhoronixTest ap-northeast-1 c5.large ami-03344c819e1ac354d
    

    image

    这个架构满足所有单机类测试的扩展,测试脚本本身和云平台主机独立演进,按需增加新的云平台,测试脚本一般跟操作系统相关,可以独立开发调试后,利用本框架自动化部署执行。

    本框架已经完成并在 AWS 平台的测试验证成功,从手工到自动化里面还有很多小坑,不一一赘述,后续团队会继续完善对其他平台的支撑,包括进一步优化,比如对于成本,在 AWS 上尽量采用竞价实例,更好的脚本执行结束通知机制,测试即服务包装成对外的 API 甚至 Web 交互界面,后续数据分析的自动化等等。

    总结

    从入职到现在,时不时会碰到这样的测试要求,或者测试数据支持,终于动手尝试自动化,欠下的技术债迟早要还的。

    服务推荐

    展开全文
  • 最近有个任务是需要我检查一些网站,如果纯手工检查话,感觉既费时又无聊。所以我就想用采集。思路其实很简单,先把网站源码采集下来,然后用正则表达式去匹配符合链接,最后把标题和网址入库、分析。因为我...

    最近有个任务是需要我检查一些网站,如果纯手工检查的话,感觉既费时又无聊。所以我就想用采集。思路其实很简单,先把网站的源码采集下来,然后用正则表达式去匹配符合的链接,最后把标题和网址入库、分析。因为我使用最多的是php,所以打算用php做网页采集。

    第一步,链接数据库,取出需要检查的网站和正则。

    数据库这里我用了postgresql,数据库和表已经按要求建好。因为默认配置的环境是centos系统加nginx、mysql和php,所以首先是配置环境。配置具体不在这里多说,下次总结。环境配置好后在php中用pg_connect连接数据库,这里我连接了两个不同的数据库。

    $conn_1=pg_connect("host=xxx.xxx.xxx.xxx port=5432 dbname=mydb1 user=postgres password=xxxxxx") ;

    $conn_2=pg_connect("host=xxx.xxx.xxx.xxx port=5432?dbname=mydb2?user=postgres password=xxxxxx") ;

    第二步,取出网页源码,对源码进行初步处理。

    不同网站编码格式不一样,需要先把编码统一转换成utf-8,不然之后入库会出现乱码。

    //获取网页源码

    //$url='http://www.sijitao.net/' ;

    $str = file_get_contents($url);

    //使用preg_match和正则表达式取出编码

    $wcharset = preg_match("/<meta.+?charset=[^\w]?([-\w]+)/i",$str,$temp) ? strtolower($temp[1]):"" ;

    //编码转换

    if($wcharset){

    $str=iconv("$wcharset", "UTF-8", $str) ;

    }

    这里我还使用str_ireplace()函数对取到的源码做了些字符替换,不然最后用正则匹配网址的时候会出现问题。

    第三步,匹配处理后的源码字符串,对匹配的数据入库。

    从数据库中取出对应的正则,保存在$preg变量,符合正则的数据已数组形式保存在$m。

    $pat = "/<a(.*?)href=\"($preg)\"(.*?)>(.*?)<\/a>/is";

    preg_match_all($pat, $str, $m);

    $cnt=count($m[2]) ;

    for($i=0;$i<$cnt;$i++){

    if(strip_tags($m[2][$i])){

    $url=strip_tags($m[2][$i]) ;

    $url=$m[2][$i] ;

    }

    if(strip_tags($m[4][$i])){

    $title=strip_tags($m[4][$i]) ;

    }

    else{

    $title="There's Something Errors!" ;

    }

    //编写代码,对title和url进行入库操作。

    }

    }

    采集单个网页这样基本上就算完成了。总结,这里其实就用了preg_match(),preg_match_all()和str_ireplace()函数。程序菜鸟,写的不好请见谅。

    原文地址:http://www.sijitao.net/1511.html


    展开全文
  • 触发器的简单概述

    2020-08-10 22:20:39
    触发器: 触发器是SQL server提供给程序员和...1、触发器是自动,当表中数据了任何修改之后立即被激活 2、触发器可以通过数据库中相关表进行层叠修改 3、触发器可以强制限制。触发器可以引用其他表中列 触

    触发器:
    触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法
    它是与表事件相关的特殊的存储过程。他的执行不是由程序调用,也不是手工
    启动,而是由事件来触发
    触发器和存储过程的区别:
    触发器与存储过程的区别是运行方式的不同,触发器不能执行EXECUTE语句调用
    而是用户在执行T-Sql语句时自动触发执行的

    触发器的优点:
    1、触发器是自动的,当表中的数据做了任何修改之后立即被激活
    2、触发器可以通过数据库中的相关表进行层叠修改
    3、触发器可以强制限制。触发器可以引用其他表中的列

    触发器的作用:
    1、强制数据库之间的引用完整性
    2、级联修改数据库中所有相关的表,自动触发其它相关的操作
    3、跟踪变化,撤销或回滚违法操作,防止非法修改数据
    4、返回自定义的错误消息,约束无法返回信息,而触发器可以
    5、触发器可以调用更多的存储过程

    触发器的分类
    1、DML(数据操作语言)触发器
    SQLserver中的DML触发器有三种:insert触发器、delete触发器、update触发器
    替代触发器 先建立临时表再执行对数据库的操作
    2、DDL(数据定义语言)触发器
    主要是以create,drop,alter开头的时间
    3、登录触发器
    在这里插入图片描述

    触发器的工作原理
    在这里插入图片描述
    eg:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • MyBatis是支持普通SQL查询,存储过程和高级映射优秀持久层框架。...首先来一个简单的例子。 (一):添加jar包 根据自己使用Mybatis版本添加相应jar包,同时还要添加数据库jar包,我在使用过程中Myb
  • oracle存储过程的sql调用

    千次阅读 2011-12-13 15:30:33
    因为项目测试,所有需要不断在数据库手工添加数据,这时候如果是批量插入测试数据,很多情况下要用到存储过程。 如下,是Oracle数据库下一个简单的插入数据存储过程: create or replace procedure ...
  • PCB手工制作流程

    千次阅读 2012-05-23 15:45:22
    PCB板是从事电子产品工作或者是电子爱好者常见...如果是一块比较简单的板子,在我们电路设计过程中,可以通过手工制作来获得。这种方法快捷,简单,成本低。一般来讲,能成单层板和两层板,如果需要多层板
  • 这个软件能检查一个目录下...这个软件还比较简单,因为工作需要有这种功能,网上找到同类软件,似乎不能自动检测文件变化,需要手工扫描,不太满足自己需要,所以自己尝试着用C#了一个。 软件已经用诺顿扫描过。
  • MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和JavaPOJO (Plain Old Java Objects,普通Java对象)映射成数据库中记录。 MyBatis作为持久层框架,其主要思想是将程序中大量SQL语句剥离出来...
  • 手工测试与自动化测试

    千次阅读 2018-02-20 14:45:54
    首先,我不太喜欢“手工”...其次,自动化测试和手工测试不是对立,你自动化一样要了解产品需求,熟悉产品实现过程,以及产品功能,时不时也要用手点吧点吧。常规产品UI功能测试,有些简单重复性比较高...
  • 但在测试过程又有许多操作是重复性、非智力性和非创造性,并要求准确细致工作,这样,计算机就比人更适合完成任务。另一方面,手工测试存在如下局限性: 简单的功能性测试用例在每一轮测试中都不...
  • 如何手工编写qtp脚本

    2011-09-02 16:05:20
    首先录制是一种非常高效方式,快速简单易学,但是在很多情况下,脚本是无法录制下来,并且如果你是需要真正把自动化起来话,那还有很长一段路要走,而要进入这段路一扇大门就是要首先学会如何进行手工编写...
  • 目前php注入工具个人感觉...首先要的是在判断好字段数后,爆破用户信息,注入的过程中 如果当前数据库连接用户为root或者具有root权限就可以尝试使用loadfile()这个函数来读取文件 比如在linux下我们可以读取...
  • 很久没从头到尾一个应用了...所以 该忘记都忘了...不该忘也忘得差不多了...   这边简单记录一下了.... 内容很简单过程却很麻烦啊 对于...导入需要CXF包和SH手工去重(知道用maven会好点..但...
  • MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和JavaPOJO (Plain Old Java Objects,普通Java对象)映射成数据库中记录。 MyBatis作为持久层框架,其主要思想是将程序中大量SQL语句剥离出来...
  • 讲一下这个hook的过程吧,比较有意思的,而且还有很大的拓展: 1.exe,dll可以统称为模块,dll其实和exe本质上是一样的.这里统称为PE文件. 2.当PE文件加载到内存的时候,导入表内保存的需要导入的函数列表,会被释放到内存,...
  • Mybatis以及简单实现

    2018-10-25 22:04:33
    它内部封装了通过JDBC访问数据库操作,支持普通SQL查询、存储过程和高级映射,几乎消除了所有JDBC代码和参数的手工设置以及结果集检索。MyBatis作为持久层框架,其主要思想是将程序中大量SQL语句剥离出来...
  • 在流体机械设计中,通常根据性能参数进行设计,算出其它变量,但问题是,在设计过程中,需要进行变量的手工调整,例如圆整,修正到某一范围,校核等等。 其计算模式举例如下: 1.定义变量,如输入压力Pin=0.98,...
  • 讲一下这个hook的过程吧,比较有意思的,而且还有很大的拓展: 1.exe,dll可以统称为模块,dll其实和exe本质上是一样的.这里统称为PE文件. 2.当PE文件加载到内存的时候,导入表内保存的需要导入的函数列表,会被释放到...
  • 树莓派笔记5:自制小车(简单避障)

    万次阅读 多人点赞 2018-02-08 20:17:23
    利用树莓派智能小车是个很常见玩法,整个过程涉及手工制作、GPIO控制、Python程序编写、网络通信等内容,知乎上有大神还加入图像识别甚至人工智能元素,我自己在制作过程中真感觉非常有意思,也很有成就感。...
  • SQL手工注入——数字型注入

    千次阅读 2016-07-01 14:05:24
    这是最简单的一种注入。 测试过程一般如下: 1、对url:xxx.php?id=88后添加',形成xxx.php?id=88',观察页面是否出现异常。若系统没有防护,则出现异常。 2、对url:xxx.php?id=88后添加and 1=1,能够正常执行...
  • 1,关键字少,运维简单 2,⭐原生支持高并发,GOROUTINE,协程 (进程是资源分配最小单位,线程是CPU调度最小单位) ...C语言时纯过程性语言,申请内存,分配内存都是需要手工处理,而GO支持简单的
  • 利用条件,使得采购具有灵活价格处理方法,不但可以处理简单的价格构成...条件是与供应商约定价格、折扣和附加费,对于每个条件可以定义是否可做手工更改,价格、折扣和附加费修改限度,可用百分比和绝对值定义。
  • python简单面试题

    2020-08-26 14:10:45
    3、在自动化的过程中出现用例执行失败,应该怎么? 编写自动化用例的时候断言编写清楚,然后也可以通过用例失败后进行截图进行保存,方便我们后续查看用例失败原因,自动化用例失败后,进行手工操作,查看是否真的...
  • 华为路由协议 路由 从源主机到目标主机转发过程 能够将数据包转发到正确目的地,并在转发过程中选择最佳路径...由管理员手工配置,是单向 缺乏灵活性 默认路由 当路由器在路由表中找不到目标网络路由...
  • 近期由于手上有几套数据库需要安装,有空闲机器可用,了下单实例转换RAC测试。下面对测试过程进行了简单记录。 --修改本地监听配置 (两个节点) [oracle@a42ams1 ~]$ cd $...
  • 写SP一直是一个头大事情,蹩脚语法怎么...在VS2005Beta1里面已经集成了SQL2005开发,这里简单demo:1. 新建SQL Server Project(注意:这里可以选择不保存项目,测试目的)2. 选择数据库向导(很一般,图略)3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 419
精华内容 167
关键字:

做简单手工的过程