添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

PHP混淆zym解密

最近二开过程中,碰到 PHP混淆zym加密 的问题,刚开始找了好多网站都是付费的,后来在吾爱破解找到了解决方法。
大神解密及调试过程,详见原文:
https://www.52pojie.cn/thread-693641-1-1.html

decrypt.php

function decrypt ( $data , $key ) $data_1 = '' ; for ( $i = 0 ; $i < strlen ( $data ) ; $i ++ ) { $ch = ord ( $data [ $i ] ) ; if ( $ch < 245 ) { if ( $ch > 136 ) { $data_1 . = chr ( $ch / 2 ) ; } else { $data_1 . = $data [ $i ] ; $data_1 = base64_decode ( $data_1 ) ; $key = md5 ( $key ) ; $j = $ctrmax = 32 ; $data_2 = '' ; for ( $i = 0 ; $i < strlen ( $data_1 ) ; $i ++ ) { if ( $j <= 0 ) { $j = $ctrmax ; $j -- ; $data_2 . = $data_1 [ $i ] ^ $key [ $j ] ; return $data_2 ; function find_data ( $code ) $code_end = strrpos ( $code , '?>' ) ; if ( ! $code_end ) { return "" ; $data_start = $code_end + 2 ; $data = substr ( $code , $data_start , - 46 ) ; return $data ; function find_key ( $code ) // $v1 = $v2('bWQ1'); // $key1 = $v1('??????'); $pos1 = strpos ( $code , "('" . preg_quote ( base64_encode ( 'md5' ) ) . "');" ) ; $pos2 = strrpos ( substr ( $code , 0 , $pos1 ) , '$' ) ; $pos3 = strrpos ( substr ( $code , 0 , $pos2 ) , '$' ) ; $var_name = substr ( $code , $pos3 , $pos2 - $pos3 - 1 ) ; $pos4 = strpos ( $code , $var_name , $pos1 ) ; $pos5 = strpos ( $code , "('" , $pos4 ) ; $pos6 = strpos ( $code , "')" , $pos4 ) ; $key = substr ( $code , $pos5 + 2 , $pos6 - $pos5 - 2 ) ; return $key ; $input_file = $argv [ 1 ] ; $output_file = $argv [ 1 ] . '.decrypted.php' ; $code = file_get_contents ( $input_file ) ; $data = find_data ( $code ) ; if ( ! $code ) { echo '未找到加密数据' , PHP_EOL ; exit ; $key = find_key ( $code ) ; if ( ! $key ) { echo '未找到秘钥' , PHP_EOL ; exit ; $decrypted = decrypt ( $data , $key ) ; $uncompressed = gzuncompress ( $decrypted ) ; // 由于可以不勾选代码压缩的选项,所以这里判断一下是否解压成功,解压失败就是没压缩 if ( $uncompressed ) { $decrypted = str_rot13 ( $uncompressed ) ; } else { $decrypted = str_rot13 ( $decrypted ) ; file_put_contents ( $output_file , $decrypted ) ; echo '解密后文件已写入到 ' , $output_file , PHP_EOL ;

php decrypt.php encrypt.php

encrypt.php 为需解密的文件

PHP混淆zym解密最近二开过程中,碰到PHP混淆zym加密的问题,刚开始找了好多网站都是付费的,后来在吾爱破解找到了解决方法。大神解密及调试过程,详见原文:https://www.52pojie.cn/thread-693641-1-1.html源码decrypt.php&lt;?phpfunction decrypt($data, $key){ $data_1 = ...
PHP 解密 PHP 加密sg11加密sg11 解密 全网最厚道的SG11 解密 方法sg11 解密 php 解密 SourceGuardian 解密 sg_load 解密 去除域名IP授权
最近在读一些有zend 5.4加密的代码,之前的黑刀无法 解密 5.4,网上找了下发现大多要收费,有一个工具叫G-DeZender能解5.4,但是未付费版本每点一次只能 解密 一个文件,这TM四五千个文件点完会死人的。 丢给公司的小莫同志研究了下,抓了下这个程序的进程,发现这个程序也是调用的本地文件去 解密 ,那直接写个循环调用不就完了。。。 花了点时间找了个SeayDzend,支持zend 5.2,zend5.3,zend5.4 的 解密 ,造福下大众。
private void initView() { nowScore = (TextView) findViewById(R.id.now_score); bestScore = (TextView) findViewById(R.id.best_score); reset = (Button) findViewById(R.id.reset); reset.setOnClickListener(this); sp = PreferenceManager.getDefaultSharedPreferences(this); editor = sp.edit(); compot = AnimationUtils.loadAnimation(this, R.anim.synt); initData(); View view1 = LayoutInflater.from(this).inflate(R.layout.game_alert, null); dialog = new AlertDialog.Builder(this) .setCancelable(false) .setView(view1) .create(); alert_retrun = view1.findViewById(R.id.retrun_alert); alert_retrun.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { retrunMain(); dialog.dismiss(); } }); alertRestart = view1.findViewById(R.id.restart_alert); alertRestart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { initData(); dialog.dismiss(); } }); zym Btn = (Button) findViewById(R.id. zym _btn); zym Btn.setOnClickListener(this); }解释这段代码
这段代码是在 2048 游戏中初始化界面的方法 initView()。具体解释如下: 首先,通过 findViewById() 方法获取界面中的各种控件,包括 nowScore(当前得分)、bestScore(最高得分)、reset(重置按钮)、 zym Btn(作者信息按钮)等。同时,通过 setOnClickListener() 方法设置按钮的点击监听事件。 接下来,通过 PreferenceManager.getDefaultSharedPreferences() 方法获取 SharedPreferences 对象 sp,用于保存游戏数据。同时,通过 sp.edit() 方法获取 SharedPreferences.Editor 对象 editor,用于向 sp 中写入数据。 然后,通过 AnimationUtils.loadAnimation() 方法加载一个动画 compot,用于在游戏中控制方块的合并动画效果。 接下来,通过 LayoutInflater.from() 方法从 game_alert.xml 布局文件中获取一个 View 对象 view1,用于在游戏结束时弹出提示框。然后,通过 AlertDialog.Builder() 方法创建一个 AlertDialog 对象 dialog,设置其为不可取消,将 view1 设置为其视图,最后通过 create() 方法创建弹窗。 接着,分别获取弹窗视图中的两个按钮 alert_retrun(返回主界面)和 alertRestart(重新开始游戏),并分别设置它们的点击监听事件,用于在游戏结束时处理相应的操作。 最后,获取界面中的作者信息按钮 zym Btn,并设置其点击监听事件。当点击该按钮时,可以跳转到作者的个人主页等。 总之,这段代码实现了 2048 游戏中界面的初始化,并设置了相应的按钮点击监听事件,为游戏的正常进行奠定了基础。