pwnable.kr [collision]

本文介绍了一个简单的密码验证程序,该程序通过将输入的20字符密码转换为整数并求和来验证密码的有效性。文章提供了实现代码及一种有效的破解方法。

题目

#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
        int* ip = (int*)p;
        int i;
        int res=0;
        for(i=0; i<5; i++){
                res += ip[i];
        }
        return res;
}

int main(int argc, char* argv[]){
        if(argc<2){
                printf("usage : %s [passcode]\n", argv[0]);
                return 0;
        }
        if(strlen(argv[1]) != 20){
                printf("passcode length should be 20 bytes\n");
                return 0;
        }

        if(hashcode == check_password( argv[1] )){
                system("/bin/cat flag");
                return 0;
        }
        else
                printf("wrong passcode.\n");
        return 0;
}

WP:

题目的逻辑也很简单,要求输入20个字符,每四个字符为一组成为一个字节的数据,一共5组相加结果得到的值为hashcode就得到了flag.这个碰撞的概率很大,所以先尝试取一个字节的字符让他乘4,再用已知的hashcode减去得到最后4个字节数据,检查是否每个字节为可见字符。如果不满足重新尝试。我选的字符程序如下:

#include<stdio.h>

int main(){
        int a=0x31283030;
        int hashcode=0x21dd09ec;
        int res = a+a+a+a;
        int t=0x5d3c492c;
        printf("0x%x\n",hashcode-res);
        printf("0x%x\n",t+res);
return 0;
}

最后得到的字符串为:”00(100(100(100(1,I<]”
输入这个即可得到flag

### Leaflet.js 中 LayerGroup.Collision 插件的使用 Leaflet.LayerGroup.Collision 是一个用于解决地图上标记 (Marker) 或其他图层之间重叠问题的有效工具[^1]。此插件通过调整位置来防止多个标记在同一地点堆叠在一起。 #### 安装与引入 为了使用 `LayerGroup.Collision` 插件,首先需要下载并包含该脚本文件到项目中: ```html <script src="https://unpkg.com/leaflet-layergroup-collision@latest"></script> ``` 或者如果采用 npm 方式安装,则可以执行如下命令: ```bash npm install leaflet-layergroup-collision ``` 接着,在 JavaScript 文件里导入模块: ```javascript import 'leaflet-layergroup-collision'; // or using require syntax const L = require('leaflet'); require('leaflet-layergroup-collision')(L); ``` #### 创建防撞图层组 创建一个新的 `L.layerGroup.collision()` 实例作为容器来容纳所有希望启用碰撞检测功能的地图元素: ```javascript var collisionMarkers = L.layerGroup.collision().addTo(map); ``` #### 添加带有图标偏移量的对象至防撞图层组 当向这个特殊类型的图层组内添加新对象时,可以通过设置合理的 `iconAnchor` 参数值给定每个对象独特的视觉中心点,从而帮助算法更好地计算相对距离关系,避免不必要的移动操作发生。 ```javascript var markerOptions = { icon: new L.Icon({ iconUrl: './marker-icon.png', shadowUrl: './marker-shadow.png', iconSize: [25, 41], iconAnchor: [12.5, 41], // 设置合适的锚点坐标 popupAnchor: [-3, -76] }) }; collisionMarkers.addLayer(L.marker([lat, lng], {icon: markerOptions.icon})); ``` #### 自定义配置选项 除了默认行为外,还可以自定义一些参数来自定义碰撞逻辑,比如最大允许位移范围(`maxShift`)以及最小安全间距(`minDistance`)等属性。 ```javascript var customCollisionSettings = { maxShift: 80, minDistance: 25 }; var advancedCollisionHandler = L.layerGroup.collision(customCollisionSettings).addTo(map); advancedCollisionHandler.addLayer(newMarkerInstance); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值