pwnable.kr collision

题目:
这里写图片描述

题目链接:http://pwnable.kr/play.php
——>连接登录查看源码如下:

#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;
}

根据

if(strlen(argv[1]) != 20){
        printf("passcode length should be 20 bytes\n");
        return 0;
}

得输入的长度为20
根据

if(hashcode == check_password( argv[1] )){
        system("/bin/cat flag");
        return 0;
}

得check_password[argv[1]] == hashcode,
即check_password[argv[1]] == 0x21DD09EC,
而check_password的作用就是将输入的数据用整型转换,求和返回。
如果输入的数据为12345678,用整型转换时的内存情况如下:
这里写图片描述

对20个字节,要构造输入的整型转换后的5个整数求和 == 0x21DD09EC,第一个想法是:前16个字节赋\x00,最后4个字节为0xEC09DD21,但是\x09是HTab,输入会被阻断。
第二个想法:前16个字节赋\x01,最后4个字节为\xE8\x05\xD9\x1D,嗯,就这样。

./col `python -c "print '\x01' * 16 + '\xE8\x05\xD9\x1D'"`

这里写图片描述

flag:daddy! I just managed to create a hash collision :)

### 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); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值