2020国赛部分re -- wp

re1:

idapy 扒校验数组:

from __future__ import print_function#支持py2使用py3的函数
from __future__ import print_function#支持py2使用py3的函数
sea = 0x404020
for i in range(sea,sea+0xa8,4): 
  print('0x%x'%(Byte(i+1)),end="")
  print(('%x'%Byte(i)+','),end="")

注意部分元素补0

from z3 import*

check = [0x17,0x4f,0x0,0x0,0xf6,0x9c,0x0,0x0,0xdb,0x8d,0x0,0x0,0xa6,0x8e,0x0,0x0,0x29,0x69,0x0,0x0,0x11,0x99,0x0,0x0,0xa2,0x40,0x0,0x0,0x3e,0x2f,0x0,0x0,0xb6,0x62,0x0,0x0,0x82,0x4b,0x0,0x0,0x6c,0x48,0x0,0x0,0x2,0x40,0x0,0x0,0xd7,0x52,0x0,0x0,0xef,0x2d,0x0,0x0,0xdc,0x28,0x0,0x0,0xd,0x64,0x0,0x0,0x8f,0x52,0x0,0x0,0x3b,0x61,0x0,0x0,0x81,0x47,0x0,0x0,0x17,0x6b,0x0,0x0,0x37,0x32,0x0,0x0,0x93,0x2a,0x0,0x0,0x5f,0x61,0x0,0x0,0xbe,0x50,0x0,0x0,0x8e,0x59,0x0,0x0,0x56,0x46,0x0,0x0,0x31,0x5b,0x0,0x0,0x3a,0x31,0x0,0x0,0x10,0x30,0x0,0x0,0xfe,0x67,0x0,0x0,0x5f,0x4d,0x0,0x0,0xdb,0x58,0x0,0x0,0x99,0x37,0x0,0x0,0xa0,0x60,0x0,0x0,0x50,0x27,0x0,0x0,0x59,0x37,0x0,0x0,0x53,0x89,0x0,0x0,0x22,0x71,0x0,0x0,0xf9,0x81,0x0,0x0,0x24,0x55,0x0,0x0,0x71,0x89,0x0,0x0,0x1d,0x3a,0x0,0x0]
#for i in range(46,88):
 #   print('v'+str(i)+' ',end="")
v46,v47,v48,v49,v50,v51,v52,v53,v54,v55 = BitVecs('v46 v47 v48 v49 v50 v51 v52 v53 v54 v55'
,64)
v56,v57,v58,v59,v60,v61,v62,v63,v64,v65 = BitVecs('v56 v57 v58 v59 v60 v61 v62 v63 v64 v65',64)
v66,v67,v68,v69,v70,v71,v72,v73,v74,v75,v76,v77,v78,v79,v80,v81,v82,v83,v84,v85,v86,v87 = BitVecs('v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87',64)
#v46,v47,v48,v49,v4a,v4b,v4c,v4d,v4e,v4f,v50,v51,v52,v53,v54,v55,v56,v57,v58,v59,v5a,v5b,v5c,v5d,v5e,v5f,v60,v61,v62,v63,v64,v65,v66,v67,v68,v69,v6a,v6b,v6c,v6d,v6e,v6f,v70,v71,v72,v73,v74,v75,v76,v77,v78,v79,v7a,v7b,v7c,v7d,v7e,v7f,v80,v81,v82,v83,v84,v85,v86,v87= Int('v46 v47 v48 v49 v4a v4b v4c v4d v4e v4f v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v5a v5b v5c v5d v5e v5f v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v6a v6b v6c v6d v6e v6f v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v7a v7b v7c v7d v7e v7f v80 v81 v82 v83 v84 v85 v86 v87' ,64)
g = Solver()
g.add(check[0] == 34 * v49 + 12 * v46 + 53 * v47 + 6 * v48 + 58 * v50 + 36 * v51 + v52)
g.add(check[1] == 27 * v50 + 73 * v49 + 12 * v48 + 83 * v46 + 85 * v47 + 96 * v51 + 52 * v52)
g.add(check[2] == 24 * v48 + 78 * v46 + 53 * v47 + 36 * v49 + 86 * v50 + 25 * v51 + 46 * v52)
g.add(check[3] == 78 * v47 + 39 * v46 + 52 * v48 + 9 * v49 + 62 * v50 + 37 * v51 + 84 * v52)
g.add(check[4] == 48 * v50 + 14 * v48 + 23 * v46 + 6 * v47 + 74 * v49 + 12 * v51 + 83 * v52)
g.add(check[5] ==15 * v51 + 48 * v50 + 92 * v48 + 85 * v47 + 27 * v46 + 42 * v49 + 72 * v52)
g.add(check[6] ==26 * v51 + 67 * v49 + 6 * v47 + 4 * v46 + 3 * v48 + 68 * v52)
g.add(check[7] ==34 * v56 + 12 * v53 + 53 * v54 + 6 * v55 + 58 * v57 + 36 * v58 + v59)
g.add(check[8]==27 * v57 + 73 * v56 + 12 * v55 + 83 * v53 + 85 * v54 + 96 * v58 + 52 * v59)
g.add(check[9] ==24 * v55 + 78 * v53 + 53 * v54 + 36 * v56 + 86 * v57 + 25 * v58 + 46 * v59)
g.add(check[10] ==78 * v54 + 39 * v53 + 52 * v55 + 9 * v56 + 62 * v57 + 37 * v58 + 84 * v59)
g.add(check[11]==48 * v57 + 14 * v55 + 23 * v53 + 6 * v54 + 74 * v56 + 12 * v58 + 83 * v59)
g.add(check[12]==15 * v58 + 48 * v57 + 92 * v55 + 85 * v54 + 27 * v53 + 42 * v56 + 72 * v59)
g.add(check[13]==26 * v58 + 67 * v56 + 6 * v54 + 4 * v53 + 3 * v55 + 68 * v59)
g.add(check[14]==34 * v63 + 12 * v60 + 53 * v61 + 6 * v62 + 58 * v64 + 36 * v65 + v66)
g.add(check[15] ==27 * v64 + 73 * v63 + 12 * v62 + 83 * v60 + 85 * v61 + 96 * v65 + 52 * v66)
g.add(check[16]==24 * v62 + 78 * v60 + 53 * v61 + 36 * v63 + 86 * v64 + 25 * v65 + 46 * v66)
g.add(check[17]==78 * v61 + 39 * v60 + 52 * v62 + 9 * v63 + 62 * v64 + 37 * v65 + 84 * v66)
g.add(check[18]==48 * v64 + 14 * v62 + 23 * v60 + 6 * v61 + 74 * v63 + 12 * v65 + 83 * v66)
g.add(check[19] ==15 * v65 + 48 * v64 + 92 * v62 + 85 * v61 + 27 * v60 + 42 * v63 + 72 * v66)
g.add(check[20]==26 * v65 + 67 * v63 + 6 * v61 + 4 * v60 + 3 * v62 + 68 * v66)
g.add(check[21] ==34 * v70 + 12 * v67 + 53 * v68 + 6 * v69 + 58 * v71 + 36 * v72 + v73)
g.add(check[22]==27 * v71 + 73 * v70 + 12 * v69 + 83 * v67 + 85 * v68 + 96 * v72 + 52 * v73)
g.add(check[23] ==24 * v69 + 78 * v67 + 53 * v68 + 36 * v70 + 86 * v71 + 25 * v72 + 46 * v73)
g.add(check[24] ==78 * v68 + 39 * v67 + 52 * v69 + 9 * v70 + 62 * v71 + 37 * v72 + 84 * v73)
g.add(check[25] ==48 * v71 + 14 * v69 + 23 * v67 + 6 * v68 + 74 * v70 + 12 * v72 + 83 * v73)
g.add(check[26] ==15 * v72 + 48 * v71 + 92 * v69 + 85 * v68 + 27 * v67 + 42 * v70 + 72 * v73)
g.add(check[27] ==26 * v72 + 67 * v70 + 6 * v68 + 4 * v67 + 3 * v69 + 68 * v73)
g.add(check[28]==34 * v77 + 12 * v74 + 53 * v75 + 6 * v76 + 58 * v78 + 36 * v79 + v80)
g.add(check[29] ==27 * v78 + 73 * v77 + 12 * v76 + 83 * v74 + 85 * v75 + 96 * v79 + 52 * v80)
g.add(check[30]==24 * v76 + 78 * v74 + 53 * v75 + 36 * v77 + 86 * v78 + 25 * v79 + 46 * v80)
g.add(check[31]==78 * v75 + 39 * v74 + 52 * v76 + 9 * v77 + 62 * v78 + 37 * v79 + 84 * v80)
g.add(check[32]==48 * v78 + 14 * v76 + 23 * v74 + 6 * v75 + 74 * v77 + 12 * v79 + 83 * v80)
g.add(check[33] ==15 * v79 + 48 * v78 + 92 * v76 + 85 * v75 + 27 * v74 + 42 * v77 + 72 * v80)
g.add(check[34] == 26 * v79 + 67 * v77 + 6 * v75 + 4 * v74 + 3 * v76 + 68 * v80)
g.add(check[35] == 34 * v84 + 12 * v81 + 53 * v82 + 6 * v83 + 58 * v85 + 36 * v86 + v87)
g.add(check[36]== 27 * v85 + 73 * v84 + 12 * v83 + 83 * v81 + 85 * v82 + 96 * v86 + 52 * v87)
g.add(check[37] == 24 * v83 + 78 * v81 + 53 * v82 + 36 * v84 + 86 * v85 + 25 * v86 + 46 * v87)
g.add(check[38] == 78 * v82 + 39 * v81 + 52 * v83 + 9 * v84 + 62 * v85 + 37 * v86 + 84 * v87)
g.add(check[39] == 48 * v85 + 14 * v83 + 23 * v81 + 6 * v82 + 74 * v84 + 12 * v86 + 83 * v87)
g.add(check[40] == 15 * v86 + 48 * v85 + 92 * v83 + 85 * v82 + 27 * v81 + 42 * v84 + 72 * v87)
g.add(check[41]== 26 * v86 + 67 * v84 + 6 * v82 + 4 * v81 + 3 * v83 + 68 * v87)
if g.check() == sat:
    print (g.model())
else:
    print("error")

re2:

推荐在textview下进行分析

注意创建的进程会有错误的跳转,就是偏移+1的那个地方。如果想看伪代码的话按u取消定义后,可使用keypatch插件将其替换成nop,再c一下就可以f5了。

核心逻辑是低六和高二的交换,再异或0x23

有用的地方只有第一个进程Startadress,注意这部分代码的阅读,底下其实还有一个+0x23的加密。

最后写脚本即可,注意元素位数。

#include<stdio.h>
int main()
{
	int check[] = {0xdd,0x5b,0x9e,0x1d,0x20,0x9e,0x90,0x91,0x90,0x90,0x91,0x92,0xde,0x8b,0x11,0xd1,0x1e,0x9e,0x8b,0x51,0x11,0x50,0x51,0x8b,0x9e,0x5d,0x5d,0x11,0x8b,0x90,0x12,0x91,0x50,0x12,0xd2,0x91,0x92,0x1e,0x9e,0x90,0xd2,0x9f};
	for (int i = 0; i < 0x2a; i++)
	{
		check[i] -= 0x23 ;
		unsigned char t1 = check[i]^0x23;
		unsigned char t2 = t1<<2;
		unsigned char t3 = t1>>6;
		//printf("%x,%x,%x\n",t1,t2,t3);
	    printf("%c",(t2+t3));
	}
 } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WP-REST-API 是WordPress 的一种接口,它通过提供标准化的RESTful API,允许开发人员使用HTTP请求来访问和操作WordPress站点的内容和数据。通过这个接口,开发人员可以使用不同的编程语言和技术来与WordPress进行交互,从而使得开发更加灵活和自由。 JWT(JSON Web Token)是一种用于认证和授权的开放标准。它通过将用户信息和权限信息编码成一种加密的令牌,以实现跨服务器和跨域的身份验证。JWT 是由三部分组成的:头部、负载和签名。头部包含令牌的加密算法和类型信息,负载包含用户的相关信息,签名用于验证令牌的真实性和完整性。 WP-REST-API JWT整合了WordPress的REST API和JWT的认证机制,使得在使用WP-REST-API进行开发的过程中,可以增加身份验证和授权的功能。它允许开发人员在请求WordPress REST API时,通过在请求头或参数中提供有效的JWT令牌来验证用户的身份和权限,并根据令牌中的负载信息来进行授权。 WP-REST-API JWT的使用具有很多优势。首先,它提供了一种轻量级的身份验证方式,减少了开发的复杂性。其次,通过JWT令牌的机制,可以实现无状态的认证和授权,提高了性能和可扩展性。此外,JWT还提供了一种可靠的机制来防止伪造和篡改请求数据,增强了系统的安全性。 总而言之,WP-REST-API JWT为开发人员提供了一种方便、灵活和安全的方式来使用WordPress的REST API。它简化了身份验证和授权的过程,并通过使用JWT令牌提高了系统的性能和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值