明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4222|回复: 10

[经验] fas文件中的if和goto指令

[复制链接]
发表于 2018-10-30 16:16:23 | 显示全部楼层 |阅读模式
本帖最后由 baitang36 于 2018-10-31 08:57 编辑

lisp语言中是没有goto语句的,程序只能顺序执行。编译以后就变了,程序可以跳来跳去。请看例子:
(defun c:tt()
(if (= a1 888)(princ "注册成功")(princ "注册失败"))
)

这句代码编译后是这样的:
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
00000000   0D 0A 20 46 41 53 34 2D  46 49 4C 45 20 3B 20 44      FAS4-FILE ; D
00000010   6F 20 6E 6F 74 20 63 68  61 6E 67 65 20 69 74 21   o not change it!
00000020   0D 0A 34 35 0D 0A 36 20  24 14 00 00 00 00 03 05     45  6 $      
00000030   00 33 78 03 00 00 35 02  04 00 03 67 0D 00 00 00    3x   5    g   
00000040   09 03 00 35 01 02 00 03  57 08 00 00 00 09 01 00      5    W      
00000050   35 01 02 00 03 16 24 0D  0A 31 35 35 20 35 20 24   5     $  155 5 $
00000060   37 C1 02 39 C4 34 31 6F  26 38 7E 15 43 47 71 77   7?9?1o&8~ CGqw
00000070   20 4A 21 70 6F 0E A4 66  5E B1 68 31 5D 5C 51 7D    J!po ^県1]\Q}
00000080   40 17 11 07 1A 0C 48 62  31 2F 23 CA 31 38 F6 2B   @     Hb1/#?8?
00000090   1B 64 06 12 12 15 43 19  07 CC AF B9 83 FB 8C 93    d    C  摊箖麑?
000000A0   1C 58 68 96 4F 7F 1E 07  12 12 15 43 19 07 CC AF    Xh朞      C  摊
000000B0   B9 83 82 E2 9A 66 58 05  C4 47 00 5D 07 4E 47 14   箖傗歠X 腉 ] NG
000000C0   00 11 07 1D 0D 01 3E 31  2B 11 C0 58 7B FE 52 65         >1+ 繶{e
000000D0   5D 07 28 46 57 47 11 06  1B 11 1F 63 31 2B 23 C9   ] (FWG     c1+#?
000000E0   00 38 CE 51 31 5D 07 12  4E 10 43 17 05 1B 04 09    8蜵1]  N C     
000000F0   62 04 2A 22 C0 02 32 CD  04 31 4B 15 10 33 F3 F0   b *"?2?1K  3箴
00000100   C8 0C 0A 3B 66 61 73 34  20 63 72 75 6E 63 68 0A   ? ;fas4 crunch
00000110   3B 24 3B 41 31 30 2F 33  30 2F 31 38               ;$;A10/30/18
将垃圾都去掉,取出关键的,就是这样的
Offset         0  1   2   3   4   5   6   7   8   9   A   B   C   D  E  F
                                                          14 00 00 00 00 03 05   
00000030   00 33 78 03 00 00 35 02  04 00 03 67 0D 00 00 00   
00000040   09 03 00 35 01 02 00 03  57 08 00 00 00 09 01 00  
00000050   35 01 02 00 03 16
红色的部分就是判断和跳转,如果条件不成立,就跳过0dh个字节,如果成立就继续执行。执行一个表达式以后,再通过无条件跳转,跳到程序出口。
只要把67后面的0D改成0,就跳过了判断,无论条件是否成立,都按条件成立来运行。这就是改一个字节破掉注册的原理。
后面的蓝色的57 08 00 00 00就是无条件跳转,跳过8个字节。相当于goto指令。


评分

参与人数 2金钱 +20 收起 理由
LPACMQ + 10 神马都是浮云
陨落 + 10 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-10-30 16:37:14 | 显示全部楼层
这是先射箭后画靶的原理
 楼主| 发表于 2018-10-30 16:54:31 | 显示全部楼层
mikewolf2k 发表于 2018-10-30 16:37
这是先射箭后画靶的原理

有道理,知道原理后就能换一种射法了
发表于 2018-10-31 20:19:19 | 显示全部楼层
楼主厉害,很给力。
发表于 2018-11-1 08:23:01 | 显示全部楼层
楼主威武,红色部分的代码如何定位的,能否详解一下,非常感谢
发表于 2018-11-1 12:21:42 | 显示全部楼层
支持深入研究
发表于 2018-11-1 16:13:17 | 显示全部楼层
先上车后买票的就是这样了
 楼主| 发表于 2018-11-1 16:38:24 | 显示全部楼层
烟盒迷唇 发表于 2018-11-1 16:13
先上车后买票的就是这样了

欢迎加QQ群讨论
 楼主| 发表于 2018-11-2 08:54:15 | 显示全部楼层
ps122hb 发表于 2018-11-1 08:23
楼主威武,红色部分的代码如何定位的,能否详解一下,非常感谢

找67,这个67就是if语句特有的,它和57组合完成if的功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-19 03:07 , Processed in 0.183347 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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