[HGAME 2022 week1]easyasm
本文最后更新于6 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

ida打开

看不了伪c代码,只能看汇编了

xor ax, ax

  • 这个指令将 ax 寄存器清零。通过与自身进行异或操作(XOR),ax 的值变为 0。

mov al, [si]

  • 这条指令将 si 寄存器指向的内存地址中的字节加载到 ax 寄存器的低 8 位(即 al)。此时,al 包含 [si] 处的字节。

shl al, 1 (重复4次)

  • 这四条 shl(左移)指令分别将 al 左移 1 位。左移相当于将 al 的值乘以 2。经过四次左移后,相当于将 al 的值乘以 16(即左移了 4 位)。

push ax

  • 这条指令将 ax 的当前值压入栈中。此时 ax 保存的是经过左移操作后的值。

xor ax, ax

  • 这条指令再次清空 ax 寄存器,将其值置为 0。

mov al, [si]

  • 这条指令重新将 si 指向的内存地址中的字节加载到 al 寄存器。

shr al, 1 (重复4次)

  • 这四条 shr(右移)指令分别将 al 右移 1 位。右移相当于将 al 的值除以 2。经过四次右移后,相当于将 al 的值除以 16(即右移了 4 位)。

pop bx

  • 这条指令将栈顶的值弹出到 bx 寄存器。栈顶的值是之前被 pushax 的值。

add ax, bx

  • 这条指令将 bx 寄存器的值加到 ax 寄存器中,即将从栈中弹出的值与当前的 ax 值相加。

xor ax, 17h

  • 这条指令将 ax 与 0x17(十六进制的 17)进行异或操作。这样会改变 ax 寄存器的值。

add si, 1

  • 这条指令将 si 寄存器的值加 1,目的是让 si 指向内存中的下一个字节。

cmp al, es:[si-1]

  • 这条指令将 al 的值与 es:[si-1] 指向的内存地址的值进行比较。es 是附加段寄存器,[si-1]si-1 处的内存值。

jz short loc_100DD

  • 如果 ales:[si-1] 的值相等(即零标志位被设置),则跳转到标签 loc_100DD 处。

这是加密后的数据,我们只需要将其与0x17异或,再向左偏移4,储存结果,加上向右偏移4的结果即可

%128确保了我们不会生成超过字符范围的值

aa=[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, 0x17]
flag=[]
for i in aa:
tan=i^0x17
flag+=chr((tan>>4)+((tan<<4)%128))
print("".join(flag))
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇