网站首页 > 易语言相关 > 易语言例程 正文
SM4加解密易语言源码
@开始学易语言
.版本 2
.程序集 程序集3
.子程序 位运算_左移_长整数型_ASM, 长整数型
.参数 数值, 长整数型
.参数 位数, 整数型
' 置入代码 (#shl64)
置入代码 ({ 139, 69, 8, 139, 85, 12, 139, 77, 16, 131, 249, 64, 124, 8, 49, 192, 49, 210, 201, 194, 12, 0, 131, 249, 32, 124, 23, 116, 13, 131, 233, 32, 211, 224, 137, 194, 49, 192, 201, 194, 12, 0, 137, 194, 49, 192, 201, 194, 12, 0, 15, 165, 194, 211, 224, 201, 194, 12, 0 })
返回 (0)
.子程序 位运算_右移_长整数型_ASM, 长整数型
.参数 数值, 长整数型
.参数 位数, 整数型
' 置入代码 (#shr64)
置入代码 ({ 139, 69, 8, 139, 85, 12, 139, 77, 16, 131, 249, 64, 124, 8, 49, 192, 49, 210, 201, 194, 12, 0, 131, 249, 32, 124, 23, 116, 13, 131, 233, 32, 137, 208, 211, 232, 49, 210, 201, 194, 12, 0, 137, 208, 49, 210, 201, 194, 12, 0, 15, 173, 208, 211, 234, 201, 194, 12, 0 })
返回 (0)
.子程序 取变量数据地址_ASM, 整数型
.参数 变量, 通用型, 参考
.参数 数据类型, 整数型, 可空
置入代码 ({ 139, 69, 8, 131, 125, 12, 9, 15, 142, 15, 0, 0, 0, 139, 0, 131, 125, 12, 11, 15, 133, 3, 0, 0, 0, 131, 192, 8, 201, 194, 12, 0 })
' mov eax, dword ptr [ebp+08h]
' cmp dword ptr [ebp+0Ch], 09h
' jng 009F968Ch
' mov eax, dword ptr [eax]
' cmp dword ptr [ebp+0Ch], 0Bh
' jne 009F968Ch
' add eax, 08h
' leave
' retn 000Ch
返回 (0)
.子程序 进制_字节集到十六进制_ASM, 文本型, , 返回把字节集数据转换为16进制数据文本,每2个字符为1字节数据
.参数 字节集数据, 字节集, , 待转换字节集数据.
.参数 分隔符号, 文本型, 可空, 分隔符的作用就是 FF分隔FF分隔FF 空=""=不分隔.
.参数 保留参数, 整数型, 可空, 此参数不需要使用.
.局部变量 十六进制, 文本型, , , 保存转换后的十六进制.若空,以返回值返回结果
保留参数 = 取字节集长度 (字节集数据)
.如果真 (保留参数 > 0)
十六进制 = 取重复文本 (保留参数, “00” + 分隔符号)
保留参数 = 取变量数据地址_ASM (十六进制, #文本型)
' 0040357E 837D 10 00 cmp dword ptr [ebp+10], 0 ; 分隔为空?
' 00403582 74 17 je short 0040359B ; 为空 跳
' 00403584 FF4D 10 dec dword ptr [ebp+10] ; 分隔长度=0
' 00403589 8B45 0C mov eax, dword ptr [ebp+C] ; EAX=参数2
' 0040358C 85C0 test eax, eax
' 0040358E 74 0D je short 0040359D ; 空参 跳
' 00403590 8B00 mov eax, dword ptr [eax] ; EAX=分隔符
' 00403592 8038 00 cmp byte ptr [eax], 0
' 00403595 74 06 je short 0040359D ; 终止 跳
' 00403597 FF45 10 inc dword ptr [ebp+10] ; 递增长度
' 0040359A 40 inc eax ; 递增地址
' 0040359B ^ EB F5 jmp short 00403592 ; 继续循环
' 0040359D 90 nop
' 0040359E 51 push ecx ; 备份ECX
' 0040359F 52 push edx ; 备份EDX
' 004035A0 53 push ebx ; 备份EBX
' 004035A1 56 push esi ; 备份ESI
' 004035A2 57 push edi ; 备份EDI
' 004035A3 8B45 08 mov eax, dword ptr [ebp+8] ; EAX=参数1
' 004035A6 8B00 mov eax, dword ptr [eax] ; EAX=字节集首
' 004035A8 8B48 04 mov ecx, dword ptr [eax+4] ; ECX=字节集长
' 004035AB 83C0 08 add eax, 8 ; EAX=字节集指针
' 004035AE 8BF0 mov esi, eax ; EBX=字节集指针
' 004035B0 8B7D 14 mov edi, dword ptr [ebp+14] ; EDI=十六文本
' 004035B3 33C0 xor eax, eax ; EAX=0
' 004035B5 BB 10000000 mov ebx, 10 ; EBX=16除数
' 004035BA 90 nop
' 004035BB 85C9 test ecx, ecx ; 长度=0?
' 004035BD 74 23 je short 004035E2 ; 等于0 跳
' 004035BF 49 dec ecx ; 递减长度
' 004035C0 8A06 mov al, byte ptr [esi] ; 取1字节
' 004035C2 33D2 xor edx, edx ; EDX=0 余
' 004035C4 F7F3 div ebx ; 除以16
' 004035C6 83F8 0A cmp eax, 0A ; 商>10
' 004035C9 72 03 jb short 004035CE ; 小于 跳
' 004035CB 83C0 07 add eax, 7 ; 英文 + 55
' 004035CE 0007 add byte ptr [edi], al ; 英文 + 48
' 004035D0 47 inc edi ; 递增文本
' 004035D1 83FA 0A cmp edx, 0A ; 余>10
' 004035D4 72 03 jb short 004035D9 ; 小于 跳
' 004035D6 83C2 07 add edx, 7 ; 英文 + 55
' 004035D9 0017 add byte ptr [edi], dl ; 英文 + 48
' 004035DB 47 inc edi ; 递增文本
' 004035DC 037D 10 add edi, dword ptr [ebp+10] ; 跳过分隔符
' 004035DF 46 inc esi ; 递增字节集
' 004035E0 ^ EB D9 jmp short 004035BB ; 继续循环
' 004035E2 90 nop
' 004035E3 397D 14 cmp dword ptr [ebp+14], edi ; 处理过数据
' 004035E6 74 01 je short 004035E9 ; 未处 跳
' 00401019 2B7D 10 sub edi, dword ptr [ebp+10] ; 递减文本
' 004035E9 880F mov byte ptr [edi], cl ; 截断字符
' 004035EB 5F pop edi ; 恢复EDI
' 004035EC 5E pop esi ; 恢复ESI
' 004035ED 5B pop ebx ; 恢复EBX
' 004035EE 5A pop edx ; 恢复EDX
' 004035EF 59 pop ecx ; 恢复ECX
' 83 7D 10 00 74 17 FF 4D 10 8B 45 0C 85 C0 74 0D 8B 00 80 38 00 74 06 FF 45 10 40 EB F5 90 51 52 53 56
' 57 8B 45 08 8B 00 8B 48 04 83 C0 08 8B F0 8B 7D 14 33 C0 BB 10 00 00 00 90 85 C9 74 23 49 8A 06
' 33 D2 F7 F3 83 F8 0A 72 03 83 C0 07 00 07 47 83 FA 0A 72 03 83 C2 07 00 17 47 03 7D 10 46 EB D9
' 90 39 7D 14 74 01 2B 7D 10 88 0F 5F 5E 5B 5A 59
置入代码 ({ 131, 125, 16, 0, 116, 23, 255, 77, 16, 139, 69, 12, 133, 192, 116, 13, 139, 0, 128, 56, 0, 116, 6, 255, 69, 16, 64, 235, 245, 144, 81, 82, 83, 86, 87, 139, 69, 8, 139, 0, 139, 72, 4, 131, 192, 8, 139, 240, 139, 125, 20, 51, 192, 187, 16, 0, 0, 0, 144, 133, 201, 116, 35, 73, 138, 6, 51, 210, 247, 243, 131, 248, 10, 114, 3, 131, 192, 7, 0, 7, 71, 131, 250, 10, 114, 3, 131, 194, 7, 0, 23, 71, 3, 125, 16, 70, 235, 217, 144, 57, 125, 20, 116, 1, 43, 125, 16, 136, 15, 95, 94, 91, 90, 89 })
.如果真结束
返回 (十六进制)
.子程序 进制_十六进制到字节集_ASM, 字节集, , 返回把指定16进制文本数据还原为字节集.每个字节由2个字符组成
.参数 十六进制文本, 文本型, , 例如 {FF,0A,DA} 或者 FF,0A,DA 或者 FF0ADA 等等
.参数 保留参数, 整数型, 可空, 此参数不需要使用.
.局部变量 字节集, 字节集
字节集 = 到字节集 (十六进制文本)
保留参数 = 取变量数据地址_ASM (字节集, #字节集型)
' 00401226 50 push eax ; 备份寄存器
' 00401227 51 push ecx
' 00401228 52 push edx
' 00401229 53 push ebx
' 0040122A 56 push esi
' 0040122B 57 push edi ; 备份寄存器
' 0040122C 33C0 xor eax, eax
' 0040122E 33C9 xor ecx, ecx
' 00401230 33D2 xor edx, edx
' 00401232 33DB xor ebx, ebx
' 00401234 8B75 08 mov esi, dword ptr [ebp+8] ; ESI=十六文本指针
' 00401237 8B7D 0C mov edi, dword ptr [ebp+C] ; EDI=字节集指针
' 0040123A 85F6 test esi, esi ; 空文本?
' 0040123C 74 04 je short 00401242 ; 空 跳
' 0040123E 8B36 mov esi, dword ptr [esi]
' 00401240 85F6 test esi, esi ; 空文本?
' 00401242 74 53 je short 00401297 ; 空 跳
' 00401244 90 nop
' 00401245 8A1E mov bl, byte ptr [esi] ; 读取1字符
' 00401247 46 inc esi ; 递增进制地址
' 00401248 80FB 30 cmp bl, 30
' 0040124B 72 3D jb short 0040128A ; 非法字 跳
' 0040124D 80FB 39 cmp bl, 39
' 00401250 77 05 ja short 00401257 ; 大于"9"跳
' 00401252 80EB 30 sub bl, 30 ; 0-9
' 00401255 EB 1D jmp short 00401274 ; 数字区 跳
' 00401257 80FB 41 cmp bl, 41
' 0040125A 72 2E jb short 0040128A ; 非法字 跳
' 0040125C 80FB 46 cmp bl, 46
' 0040125F 77 05 ja short 00401266 ; 大于"F"跳
' 00401261 80EB 37 sub bl, 37 ; A-F
' 00401264 EB 0E jmp short 00401274 ; 字母区 跳
' 00401266 80FB 61 cmp bl, 61
' 00401269 72 1F jb short 0040128A ; 非法字 跳
' 0040126B 80FB 66 cmp bl, 66 ; 非法字 跳
' 0040126E 77 1A ja short 0040128A ; a-f
' 00401270 80EB 57 sub bl, 57
' 00401273 90 nop
' 00401274 85C0 test eax, eax ; 有无高位? 正常进制处理
' 00401276 75 05 jnz short 0040127D ; 有高位跳
' 00401278 40 inc eax ; 置有高位
' 00401279 8BD3 mov edx, ebx ; 保存高位
' 0040127B ^ EB C8 jmp short 00401245 ; 继续循环
' 0040127D 48 dec eax ; 置无高位
' 0040127E 41 inc ecx ; 递增长度
' 0040127F C1E2 04 shl edx, 4 ; 左移高位
' 00401282 09DA or edx, ebx ; 合并字节
' 00401284 8817 mov byte ptr [edi], dl ; 保存字节
' 00401286 47 inc edi ; 递增写入
' 00401287 ^ EB BC jmp short 00401245 ; 继续循环
' 00401289 90 nop
' 0040128A 85C0 test eax, eax ; 有无未存? 非法字符处理
' 0040128C 74 05 je short 00401293 ; 无未存跳
' 0040128E 48 dec eax ; 置无未存
' 0040128F 41 inc ecx ; 递增长度
' 00401290 8817 mov byte ptr [edi], dl ; 保存字节
' 00401292 47 inc edi ; 递增写入
' 00401293 85DB test ebx, ebx ; 是否 {0}?
' 00401295 ^ 75 AE jnz short 00401245 ; 继续循环
' 00401297 894D 0C mov dword ptr [ebp+C], ecx ; 参数2=长度
' 0040129A 5F pop edi ; 恢复寄存器
' 0040129B 5E pop esi
' 0040129C 5B pop ebx
' 0040129D 5A pop edx
' 0040129E 59 pop ecx
' 0040129F 58 pop eax ; 恢复寄存器
' 50 51 52 53 56 57 33 C0 33 C9 33 D2 33 DB 8B 75 08 8B 7D 0C 85 F6 74 04 8B 36 85 F6 74 53 90 8A
' 1E 46 80 FB 30 72 3D 80 FB 39 77 05 80 EB 30 EB 1D 80 FB 41 72 2E 80 FB 46 77 05 80 EB 37 EB 0E
' 80 FB 61 72 1F 80 FB 66 77 1A 80 EB 57 90 85 C0 75 05 40 8B D3 EB C8 48 41 C1 E2 04 09 DA 88 17
' 47 EB BC 90 85 C0 74 05 48 41 88 17 47 85 DB 75 AE 89 4D 0C 5F 5E 5B 5A 59 58
置入代码 ({ 80, 81, 82, 83, 86, 87, 51, 192, 51, 201, 51, 210, 51, 219, 139, 117, 8, 139, 125, 12, 133, 246, 116, 4, 139, 54, 133, 246, 116, 83, 144, 138, 30, 70, 128, 251, 48, 114, 61, 128, 251, 57, 119, 5, 128, 235, 48, 235, 29, 128, 251, 65, 114, 46, 128, 251, 70, 119, 5, 128, 235, 55, 235, 14, 128, 251, 97, 114, 31, 128, 251, 102, 119, 26, 128, 235, 87, 144, 133, 192, 117, 5, 64, 139, 211, 235, 200, 72, 65, 193, 226, 4, 9, 218, 136, 23, 71, 235, 188, 144, 133, 192, 116, 5, 72, 65, 136, 23, 71, 133, 219, 117, 174, 137, 77, 12, 95, 94, 91, 90, 89, 88 })
返回 (取字节集左边 (字节集, 保留参数))
.子程序 位运算_位与_长整数_ASM, 长整数型
.参数 val1, 长整数型
.参数 val2, 长整数型
置入代码 ({ 139, 69, 8, 35, 69, 16, 139, 85, 12, 35, 85, 20, 93, 194, 16, 0 })
返回 (0)
.子程序 位运算_位或_长整数_ASM, 长整数型
.参数 val1, 长整数型
.参数 val2, 长整数型
置入代码 ({ 139, 69, 8, 11, 69, 16, 139, 85, 12, 11, 85, 20, 93, 194, 16, 0 })
返回 (0)
.子程序 位运算_位异或_长整数_ASM, 长整数型
.参数 val1, 长整数型
.参数 val2, 长整数型
置入代码 ({ 139, 69, 8, 51, 69, 16, 139, 85, 12, 51, 85, 20, 93, 194, 16, 0 })
返回 (0)- 上一篇: 精易抓包浏览器v2.1
- 下一篇: 易语言文本制表
猜你喜欢
- 2025-01-04 hook抓取电脑和安卓交互的TCP请求,Tcp-adb源码分享
- 2025-01-03 易语言取文件真实创建时间
- 2025-01-03 易语言实现彩色会闪会抖动的字,而且还在标题栏
- 2024-06-28 通讯录VCF文件生成源码
- 2024-03-16 2024无模块静默取已登录QQ
- 2024-03-16 批量转换PPT为PDF源码
- 2024-03-15 串口相关, 虚拟串口,枚举串口,PCOMM使用
- 2024-03-14 易语言取Unix时间戳源码
- 2024-03-13 易语言源码 安卓 ADB调试桥 真机调试
- 2024-03-11 易语言控件自动缩放源码
欢迎 你 发表评论:
- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag











本文暂时没有评论,来添加一个吧(●'◡'●)