吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1644|回复: 11
收起左侧

[求助] 看不懂这个算法,求大佬支援啊

[复制链接]
wintop 发表于 2020-7-31 15:31
本帖最后由 wintop 于 2020-8-2 14:24 编辑

一个pb算法。下面是解码函数,求帮忙写出加密函数。
解法说明:
已经在写算法了,有点烧脑。
写下思路。
https://www.52pojie.cn/forum.php ... &page=2#pid33329031,从下往上推。

已解决:
本来打算用爆破模式来,发现太废劲,36*36....几万万亿 了,用php 和易语言算了下,10W次差不多10秒。只能逆向算法。

解密('QJWDMBP4IS)=>6v8v8pn58v

加密('6v8v8pn58v') =>QJWDMBP4IS

算法不打算写出来了,鄙人php写算法弄的太乱,怕影响各位学习。
说下思路:
逆向上推,最主要的就是 在11位的时候,左边第一位和上面的for 循环 判断 最后一位的 pos。












悬赏在这里  https://www.52pojie.cn/thread-1235151-1-1.html
[Asm] 纯文本查看 复制代码
public function string uf_decode(string as_input)
 
string ls_beg
string ls_end
string ls_str
long li_lenbeg
long li_lenstr
long i
long li_pos
long li_off
long j
long li_leninp
 
 
as_input = lower(as_input)
if len(as_input) < 3 then
        return ""
end if
ls_str =  "abcdef012wxyz345mnopqr6789ghijklstuv"
li_lenstr = len(ls_str)
li_leninp = len(as_input)
ls_beg = as_input
for j = 1 to li_leninp 
        ls_end = ""
        li_lenbeg = len(ls_beg)
        li_pos = pos(ls_str,mid(ls_beg,li_lenbeg,1))
        li_off = pos(ls_str,mid(ls_beg,li_lenbeg - 1,1))
        if li_pos = 0 or li_off = 0 then
                return ""
        end if
        li_pos = li_pos - li_off
        if li_pos < 1 then
                li_pos = li_pos + li_lenstr
        end if
        li_pos = li_pos * 2
        if li_pos > li_lenstr then
                li_pos = li_pos - li_lenstr
        end if
        ls_beg = mid(ls_str,li_pos,1) + ls_beg
        li_lenbeg = len(ls_beg)
        for i = li_lenbeg to 2 step -1
                li_pos = pos(ls_str,mid(ls_beg,i,1))
                li_off = pos(ls_str,mid(ls_beg,i - 1,1))
                if li_pos = 0 or li_off = 0 then
                        return ""
                end if
                li_pos = li_pos - li_off
                if li_pos < 1 then
                        li_pos = li_pos + li_lenstr
                end if
                ls_end = mid(ls_str,li_pos,1) + ls_end
        next 
        ls_end = right(ls_end,1) + left(ls_end,len(ls_end) - 1)
        ls_beg = ls_end
next 
return ls_end


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| wintop 发表于 2020-7-31 16:02
Light紫星 发表于 2020-7-31 15:43
你这个是什么语言,php吗?我测试好像报错

power building 。php 我还在一点点的啃它到底算法。贴给你下
[PHP] 纯文本查看 复制代码
function uf_decode($input){
	$input = strtolower($input);
	if(strlen($input) < 3){
		return "";
	}
	$key =  "abcdef012wxyz345mnopqr6789ghijklstuv";
	$li_lenstr = strlen($key);
	$len_input = strlen($input);
	$ls_beg = $input;
	for($j = 1;$j<=$len_input;$j++){//< or <=  序列号每一个都要处理
		$return_add = "";
		$li_lenbeg = strlen($ls_beg);//初始值是序列号,后期会增加
		$li_pos = pb_pos($key,mid($ls_beg,$li_lenbeg,1)); //mid(序列号_增加,序列号_增加_长度,1)
		$li_off = pb_pos($key,mid($ls_beg,$li_lenbeg - 1,1));
		if($li_pos == 0 || $li_off == 0){
			return "";
		}
		$li_pos = $li_pos - $li_off;
		if($li_pos < 1){
			$li_pos = $li_pos + $li_lenstr;
		}
		$li_pos = $li_pos * 2;//2
		if($li_pos > $li_lenstr){
			$li_pos = $li_pos - $li_lenstr;
		}
		$ls_beg = mid($key,$li_pos,1) . $ls_beg;//b.input
		$li_lenbeg = strlen($ls_beg);//11
		for($i = $li_lenbeg;$i<=2;$i--){
			$li_pos = pb_pos($key,mid($ls_beg,$i,1));
			$li_off = pb_pos($key,mid($ls_beg,$i - 1,1));
			if($li_pos == 0 || $li_off == 0){
				return "";
			}
			$li_pos = $li_pos - $li_off;
			if($li_pos < 1){
				$li_pos = $li_pos + $li_lenstr;
			}
			$return_add = mid($key,$li_pos,1) . $return_add;
		} 
		$return_add = right($return_add,1) . left($return_add,strlen($return_add) - 1);
		$ls_beg = $return_add;
	}
	return $ls_end;
}

function pb_pos($str,$find){
	$r = strpos($str,$find);
	if($r!==false){
		return ($r+1);
	}else{
		return 0;
	}
}
function mid($str,$start,$length){
	return substr($str,$start-1,$length);
}
function left($str,$len){
	return substr($str,0,$len);
}
function right($str,$len){
	return substr($str,0-$len);
}
exit;
?>
 楼主| wintop 发表于 2020-8-1 17:51
本帖最后由 wintop 于 2020-8-1 18:15 编辑

抽出时间,进行测试。
随便输入10位字符,进行解密(0138892513)
观察里面的数据情况,10位字符需要运行的数据产生,如下
[Asm] 纯文本查看 复制代码
ls_beg=y0138892513
6--f
28--hf
7--0hf
19--o0hf
1--ao0hf
36--vao0hf
11--xvao0hf
6--fxvao0hf
1--afxvao0hf
31--kafxvao0hf
return_add:kafxvao0hf

ls_beg=ffkafxvao0h
21--q
24--7q
18--n7q
1--an7q
25--8an7q
5--e8an7q
5--ee8an7q
6--fee8an7q
25--8fee8an7q
36--v8fee8an7q
return_add:v8fee8an7q

ls_beg=yqv8fee8an7
6--f
17--mf
12--ymf
20--pymf
36--vpymf
35--uvpymf
17--muvpymf
25--8muvpymf
15--48muvpymf
9--248muvpymf
return_add:248muvpymf

ls_beg=wf248muvpym
5--e
28--he
20--phe
1--aphe
18--naphe
28--hnaphe
10--whnaphe
6--fwhnaphe
3--cfwhnaphe
32--lcfwhnaphe
return_add:lcfwhnaphe

ls_beg=5elcfwhnaph
8--1
19--o1
19--oo1
26--9oo1
18--n9oo1
4--dn9oo1
3--cdn9oo1
7--0cdn9oo1
27--g0cdn9oo1
25--8g0cdn9oo1
return_add:8g0cdn9oo1

ls_beg=v18g0cdn9oo
36--v
29--iv
8--1iv
14--31iv
1--a31iv
32--la31iv
16--5la31iv
2--b5la31iv
17--mb5la31iv
8--1mb5la31iv
return_add:1mb5la31iv

ls_beg=fv1mb5la31i
21--q
30--jq
13--zjq
5--ezjq
16--5ezjq
14--35ezjq
21--q35ezjq
9--2q35ezjq
8--12q35ezjq
30--j12q35ezjq
return_add:j12q35ezjq

ls_beg=tqj12q35ezj
17--m
8--1m
25--81m
2--b81m
29--ib81m
12--yib81m
1--ayib81m
14--3ayib81m
9--23ayib81m
23--623ayib81m
return_add:623ayib81m

ls_beg=bm623ayib81
19--o
23--6o
9--26o
17--m26o
11--xm26o
23--6xm26o
5--e6xm26o
22--re6xm26o
6--fre6xm26o
15--4fre6xm26o
return_add:4fre6xm26o

ls_beg=ho4fre6xm26
14--3
28--h3
6--fh3
24--7fh3
18--n7fh3
19--on7fh3
16--5on7fh3
27--g5on7fh3
32--lg5on7fh3
27--glg5on7fh3
return_add:glg5on7fh3

3glg5on7fh

经过研究,发现解密的程序并不麻烦,也即是说加密的算法并不麻烦,也是需要这100步骤,并且每一步要获取字符串在key 中的位置。
Light紫星 发表于 2020-7-31 15:43
Light紫星 发表于 2020-7-31 15:44
能否给几个加密-解密对应的字符串,我改用Python写出对比一下
 楼主| wintop 发表于 2020-7-31 16:21
本帖最后由 wintop 于 2020-7-31 16:24 编辑
Light紫星 发表于 2020-7-31 15:44
能否给几个加密-解密对应的字符串,我改用Python写出对比一下

6v8v8pn58
上面这个是加密后,要用decode(某个字符串) 去解密成6v8v8pn58

decode  函数在上面出来了,所以想做一个encode 函数。
rosemaryzed 发表于 2020-7-31 16:37
为什么这个代码看起来好像VB的 算法不太行 看大佬们操作
cola_ 发表于 2020-7-31 16:38
一脸懵,
 楼主| wintop 发表于 2020-7-31 16:45
[quote][url=forum.php?mod=redirect

别,都是一步一步学习进步的
 楼主| wintop 发表于 2020-7-31 16:46
[quote][url=forum.php?mod=redirect

算法而已,是pb代码
Light紫星 发表于 2020-7-31 22:10
wintop 发表于 2020-7-31 16:21
6v8v8pn58
上面这个是加密后,要用decode(某个字符串) 去解密成6v8v8pn58

你给一个加密后的字符串啊,不然也没法测试呢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表