easyyasm

easyyasm

这题是一个没有壳的16位汇编逆向

直接用ida分析

seg003:0000                 public start
seg003:0000 start           proc near
seg003:0000                 mov     ax, seg dseg
seg003:0003                 mov     ds, ax
seg003:0005                 assume ds:dseg
seg003:0005                 mov     ax, seg seg001 //seg001 move ax 这里的是比较数据
seg003:0008                 mov     es, ax  //ax move es
seg003:000A                 assume es:seg001 // 伪指令
seg003:000A                 mov     si, 0 // set si 0
seg003:000D
seg003:000D loc_100DD:                              ; CODE XREF: start+38↓j
seg003:000D                 cmp     si, 1Ch //compare si 1Ch to 28 (大抵是循环28次)
seg003:0010                 jz      short loc_10135 //判断跳转right
seg003:0012                 xor     ax, ax // 归零
seg003:0014                 mov     al, [si] 
seg003:0016                 shl     al, 1  // al是 ax的低八位,此处左移4位(1个hex)
seg003:0018                 shl     al, 1
seg003:001A                 shl     al, 1
seg003:001C                 shl     al, 1
seg003:001E                 push    ax  // ax入栈
seg003:001F                 xor     ax, ax // 归零
seg003:0021                 mov     al, [si]
seg003:0023                 shr     al, 1 // ax右移1hex
seg003:0025                 shr     al, 1
seg003:0027                 shr     al, 1
seg003:0029                 shr     al, 1
seg003:002B                 pop     bx // bx出栈
seg003:002C                 add     ax, bx // ax加bx 约等于按位或
seg003:002E                 xor     ax, 17h // ax 异或 0x17
seg003:0031                 add     si, 1 // si 加  1
seg003:0034                 cmp     al, es:[si-1]  // es compare 也就是和data比较
seg003:0038                 jz      short loc_100DD // 判断跳转worng或者重复循环

分析完写脚本

data=[0x91, 0x61, 0x01, 0xC1, 0x41, 0xA0, 0x60, 0x41, 0xD1, 0x21, 0x14, 0xC1,
      0x41, 0xE2, 0x50, 0xE1, 0xE2, 0x54, 0x20, 0xC1, 0xE2, 0x60, 0x14, 0x30, 0xD1, 0x51, 0xC0]
flag=''
for i in data:
      i ^= 0x17
      a = (i << 4) & 0xff  # 取低八位
      b = (i >> 4)
      i = a | b
      flag+= chr(i)
print(flag)

结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值