Je suis bientôt jugé pour un « vol » de plusieurs millions de dollars (nofake)
SuppriméLe 31 mai 2023 à 18:37:16 :
Le 31 mai 2023 à 12:56:18 :
Le 31 mai 2023 à 12:51:41 :
Le 31 mai 2023 à 12:48:22 :
Le 31 mai 2023 à 02:16:01 :
> Le 31 mai 2023 à 01:59:22 :
>> Le 31 mai 2023 à 01:40:34 :
> >> Le 31 mai 2023 à 01:35:33 :
> > >Mais comment la plateforme a pu te laisser emprunter 44M sans contrepartie ?
> >
> > C’est le principe d’une flashloan, dans une seule et même transaction tu as la possibilité d’emprunter ce que tu veux tant qu’ils l’ont dans leur réserves (jusqu’à des milliards de dollars), tant que tu rends l’argent avec les frais demandés en plus (0.09% du montant emprunté).
> >
> > Si tu ne rends pas l’argent ta transaction passe simplement pas. Ils te le prêtent que si, « programatiquement », ils récupèrent leur argent, c’est ni « falsifiable » ni « hackable ».
> >
> > En général les gens utilisent le concept de flashloan pour faire de l’arbitrage ou des liquidations.
>
> mais tu peux expliquer plus en détails , l'argent prêté sert à quoi du coup si tu le rends dans la même transaction ?
Admettons qu'il existe plusieurs sites d'échanges de crypto décentralisés (qui tournent donc sur des smart contract, on appel ça des DEX), et que sur site 1, le BTC se vend à 25.400$, et que sur site 2, il y'a un petit décalage et le BTC se vend 25.850$ (ces écarts sont très récurrents mais durent quelques millisecondes à peine car il y'a des bots qui tournent en permanence).
Tu pourrais par-exemple buy 2 BTC pour 50.800$ sur site 1, et les revendre 51.700$ sur site 2, ce qui te donnerait 900$ de profit. Hors, tu n'as peut-être pas 50.800$ à investir, dans ce cas tu vas utiliser une flashloan.
Tu vas coder en une seule transaction les actions suivantes :
- emprunter 50.800$ (ex : à Aave, en USDT)
- buy 2.00 BTC sur site 1
- sell 2.00 BTC sur site 2
- rendre les 50.800$ + 0.09% de frais à Aave (donc 50.845,72$, soit 45,72$ de frais
Je ne comprends pas la flash loan. Si ton script est trop lent et sur tu te foires sur la vente car le prix a été corrigé entre temps, tu te retrouves juste avec des btc invendus et tu ne peux pas rembourser.
Si le prix a été corrigé entre la détection par mon bot et l’instant d’exécution (quelques millisecondes), la transaction ne passe simplement pas, elle est revert, personne n’a rien perdu.
Mais il y a trois tiers différents, comment tu peux tous les coordonner. Le prêt, l'achat et la vente sont chronologiques.
Si Gustave te donne un billet de 20€, que tu achètes 10 billes à Pierre et que Louis te dit ensuite "finalement je ne t'achète plus tes billes 21€ mais 20€", je ne comprends pas comment la décision de Louis est rétroactive sur les actions de Gustave et de Pierre.
Up, pour une fois qu'on a un topic intéressant
Voilà à quoi ressemble du code en solidity, un "smart contract", concrètement.
Ce sont pour commencer : un ensemble de variables (comme AddrList
sur le screen, ou AddrAmt
, ou encore owner
), visibles publiquement par n'importe qui n'importe quand.
Ensuite une ou plusieurs fonctions (ici on a par-ex DepositMoney
et withdrawMoney
), qui peuvent éventuellement prendre ce qu'on appel des "arguments", des paramètres si tu préfère. Par-exemple on voit ici que le développeur a permis qu'on glisse un argument/paramètre _amount
(montant) sur la fonction de retrait.
--
Une fois que tu as saisi ça, sache que tout ça, ces smart contracts qui disposent de fonctions et de variables, sont stockés sur la blockchain. A partir de ce moment là, n'importe qui pourra lire le contrat, voir son code, voir le contenu des variables stockées, appeler des fonctions, etc...
Par-exemple, admettons que tu ailles sur Uniswap pour échanger de du BTC en USDT, techniquement ce qu'il se passe c'est que tu vas call (appeler) la fonction swap
avec certains arguments (tel que le montant par-ex), mais toi de ton point de vue t'as juste cliqué sur "échanger" sur leur site web, et t'as validé une transaction sur ton wallet MetaMask en cliquant sur "confirmer".
En faisant ça, tu viens d'effectuer 1 transaction qui contient 1 instruction. Mais tu aurais totalement pu passer 100 instructions dans ta transaction, mais il aurait fallu "coder" la transaction.
Il faut aussi savoir qu'une transaction s'exécute sur ce qu'on appel un "bloc", donc quand tu envoie une transaction, elle est exécutée selon l'état de la blockchain à l'instant T où le validateur/mineur traite ta transaction, l'instant où son processeur exécute ton code.
Une transaction ne peut pas s'étaler sur plusieurs blocs/secondes, un bloc c'est un bloc, soit ta transaction est validée et n'a provoquée aucune erreur et est passé, auquel cas elle reste inscrite à vie dans ce bloc et donc dans la blockchain. Soit elle n'est pas passée (on dit qu'elle s'est faite revert), et donc elle est simplement pas inscrite sur la blockchain.
Dans l'exemple suivant :
- emprunter 50.800$ (ex : à Aave, en USDT)
- buy 2.00 BTC sur site 1
- sell 2.00 BTC sur site 2
- rendre les 50.800$ + 0.09% de frais à Aave (donc 50.845,72$, soit 45,72$ de frais
On pourrait imaginer ça en une fonction Solidity qui ressemblerait à ça (je vulgarise au max) :
(j'ai mis une seconde version où j'ajoute des commentaires)
Donc nous on appellera que la fonction principale doArbitrage
de notre smart contract, qui elle se chargera de demander une flashloan au smart contract d'Aave, ensuite Aave rappel notre contrat (il appel notre fonction executeOperation
, pour en gros dire "sayer tiens t'as les thunes mtn fais ce que t'as à faire et à la fin j'te reprend ça"), et cette fonction rappelée sur notre contract c'est elle qui se chargera d'effectuer les échanges grâce aux smart contracts des sites A et B. C'est que des communications entre smart contracts.
Maintenant si jamais ça bloque à n'importe quelle étape, qui peut être :
- comme par-hasard Aave n'a pas les 50k pour la flashloan
- le prix du site A a changé
- le prix du site B a changé
La transaction sera simplement revert, annulée, elle n'aura juste jamais eu lieu, car c'est soit tout passe, soit rien passe. C'est 1 seule et unique transaction, qui certes contient diverses sous instructions, mais ça reste une seule. Tu peux avoir 1000 instructions ou 1 instruction, c'est pareil, ça prendra à peine quelques millisecondes à s'exécuter, c'est un temps imperceptible. Mais si y'a juste 1 erreur, n'importe où, un truc qui passe pas, c'est mort.
Imagine t'as 1000 instructions d'échanges, et y'en a 999 qui passent mais juste la dernière qui foire, la machine virtuelle ethereum du mineur/validateur aura tout executé, mais arrivé à la dernière, elle se rend compte que c'est mort y'a une erreur et elle retourne en arrière en annulant automatiquement tout les changements faits, c'est juste comme ça, c'est "programmatiquement" ainsi.
Si Gustave te donne un billet de 20€, que tu achètes 10 billes à Pierre et que Louis te dit ensuite "finalement je ne t'achète plus tes billes 21€ mais 20€", je ne comprends pas comment la décision de Louis est rétroactive sur les actions de Gustave et de Pierre.
Pour faire ultra simple ultra résumé : ça marche pas comme ça, voit plutôt ça comme une scène ou y’a Gustave Pierre et Louis dans la même pièce et que soit ils sont tous d’accord et font l’échange d’un coup en même temps, et si au moins une personne n’est pas d’accord aucun échange ne se fait tout le monde rentre chez lui (transaction revert). Si les personnes sont d’accord l’échange se fait instant et il est définitif (transaction validée et inscrite sur la blockchain) et aucun litige n’est physiquement possible.
Le 01 juin 2023 à 20:24:14 :
Le 31 mai 2023 à 18:37:16 :
Le 31 mai 2023 à 12:56:18 :
Le 31 mai 2023 à 12:51:41 :
Le 31 mai 2023 à 12:48:22 :
> Le 31 mai 2023 à 02:16:01 :
>> Le 31 mai 2023 à 01:59:22 :
> >> Le 31 mai 2023 à 01:40:34 :
> > >> Le 31 mai 2023 à 01:35:33 :
> > > >Mais comment la plateforme a pu te laisser emprunter 44M sans contrepartie ?
> > >
> > > C’est le principe d’une flashloan, dans une seule et même transaction tu as la possibilité d’emprunter ce que tu veux tant qu’ils l’ont dans leur réserves (jusqu’à des milliards de dollars), tant que tu rends l’argent avec les frais demandés en plus (0.09% du montant emprunté).
> > >
> > > Si tu ne rends pas l’argent ta transaction passe simplement pas. Ils te le prêtent que si, « programatiquement », ils récupèrent leur argent, c’est ni « falsifiable » ni « hackable ».
> > >
> > > En général les gens utilisent le concept de flashloan pour faire de l’arbitrage ou des liquidations.
> >
> > mais tu peux expliquer plus en détails , l'argent prêté sert à quoi du coup si tu le rends dans la même transaction ?
>
> Admettons qu'il existe plusieurs sites d'échanges de crypto décentralisés (qui tournent donc sur des smart contract, on appel ça des DEX), et que sur site 1, le BTC se vend à 25.400$, et que sur site 2, il y'a un petit décalage et le BTC se vend 25.850$ (ces écarts sont très récurrents mais durent quelques millisecondes à peine car il y'a des bots qui tournent en permanence).
>
> Tu pourrais par-exemple buy 2 BTC pour 50.800$ sur site 1, et les revendre 51.700$ sur site 2, ce qui te donnerait 900$ de profit. Hors, tu n'as peut-être pas 50.800$ à investir, dans ce cas tu vas utiliser une flashloan.
>
> Tu vas coder en une seule transaction les actions suivantes :
> # emprunter 50.800$ (ex : à Aave, en USDT)
> # buy 2.00 BTC sur site 1
> # sell 2.00 BTC sur site 2
> # rendre les 50.800$ + 0.09% de frais à Aave (donc 50.845,72$, soit 45,72$ de frais
Je ne comprends pas la flash loan. Si ton script est trop lent et sur tu te foires sur la vente car le prix a été corrigé entre temps, tu te retrouves juste avec des btc invendus et tu ne peux pas rembourser.
Si le prix a été corrigé entre la détection par mon bot et l’instant d’exécution (quelques millisecondes), la transaction ne passe simplement pas, elle est revert, personne n’a rien perdu.
Mais il y a trois tiers différents, comment tu peux tous les coordonner. Le prêt, l'achat et la vente sont chronologiques.
Si Gustave te donne un billet de 20€, que tu achètes 10 billes à Pierre et que Louis te dit ensuite "finalement je ne t'achète plus tes billes 21€ mais 20€", je ne comprends pas comment la décision de Louis est rétroactive sur les actions de Gustave et de Pierre.
Up, pour une fois qu'on a un topic intéressant
Voilà à quoi ressemble du code en solidity, un "smart contract", concrètement.
Ce sont pour commencer : un ensemble de variables (comme
AddrList
sur le screen, ouAddrAmt
, ou encoreowner
), visibles publiquement par n'importe qui n'importe quand.Ensuite une ou plusieurs fonctions (ici on a par-ex
DepositMoney
etwithdrawMoney
), qui peuvent éventuellement prendre ce qu'on appel des "arguments", des paramètres si tu préfère. Par-exemple on voit ici que le développeur a permis qu'on glisse un argument/paramètre_amount
(montant) sur la fonction de retrait.--
Une fois que tu as saisi ça, sache que tout ça, ces smart contracts qui disposent de fonctions et de variables, sont stockés sur la blockchain. A partir de ce moment là, n'importe qui pourra lire le contrat, voir son code, voir le contenu des variables stockées, appeler des fonctions, etc...
Par-exemple, admettons que tu ailles sur Uniswap pour échanger de du BTC en USDT, techniquement ce qu'il se passe c'est que tu vas call (appeler) la fonction
swap
avec certains arguments (tel que le montant par-ex), mais toi de ton point de vue t'as juste cliqué sur "échanger" sur leur site web, et t'as validé une transaction sur ton wallet MetaMask en cliquant sur "confirmer".En faisant ça, tu viens d'effectuer 1 transaction qui contient 1 instruction. Mais tu aurais totalement pu passer 100 instructions dans ta transaction, mais il aurait fallu "coder" la transaction.
Il faut aussi savoir qu'une transaction s'exécute sur ce qu'on appel un "bloc", donc quand tu envoie une transaction, elle est exécutée selon l'état de la blockchain à l'instant T où le validateur/mineur traite ta transaction, l'instant où son processeur exécute ton code.
Une transaction ne peut pas s'étaler sur plusieurs blocs/secondes, un bloc c'est un bloc, soit ta transaction est validée et n'a provoquée aucune erreur et est passé, auquel cas elle reste inscrite à vie dans ce bloc et donc dans la blockchain. Soit elle n'est pas passée (on dit qu'elle s'est faite revert), et donc elle est simplement pas inscrite sur la blockchain.
Dans l'exemple suivant :
- emprunter 50.800$ (ex : à Aave, en USDT)
- buy 2.00 BTC sur site 1
- sell 2.00 BTC sur site 2
- rendre les 50.800$ + 0.09% de frais à Aave (donc 50.845,72$, soit 45,72$ de frais
On pourrait imaginer ça en une fonction Solidity qui ressemblerait à ça (je vulgarise au max) :
![]()
(j'ai mis une seconde version où j'ajoute des commentaires)
Donc nous on appellera que la fonction principale
doArbitrage
de notre smart contract, qui elle se chargera de demander une flashloan au smart contract d'Aave, ensuite Aave rappel notre contrat (il appel notre fonctionexecuteOperation
, pour en gros dire "sayer tiens t'as les thunes mtn fais ce que t'as à faire et à la fin j'te reprend ça"), et cette fonction rappelée sur notre contract c'est elle qui se chargera d'effectuer les échanges grâce aux smart contracts des sites A et B. C'est que des communications entre smart contracts.Maintenant si jamais ça bloque à n'importe quelle étape, qui peut être :
- comme par-hasard Aave n'a pas les 50k pour la flashloan
- le prix du site A a changé
- le prix du site B a changé
La transaction sera simplement revert, annulée, elle n'aura juste jamais eu lieu, car c'est soit tout passe, soit rien passe. C'est 1 seule et unique transaction, qui certes contient diverses sous instructions, mais ça reste une seule. Tu peux avoir 1000 instructions ou 1 instruction, c'est pareil, ça prendra à peine quelques millisecondes à s'exécuter, c'est un temps imperceptible. Mais si y'a juste 1 erreur, n'importe où, un truc qui passe pas, c'est mort.
Imagine t'as 1000 instructions d'échanges, et y'en a 999 qui passent mais juste la dernière qui foire, la machine virtuelle ethereum du mineur/validateur aura tout executé, mais arrivé à la dernière, elle se rend compte que c'est mort y'a une erreur et elle retourne en arrière en annulant automatiquement tout les changements faits, c'est juste comme ça, c'est "programmatiquement" ainsi.
Tres interessant, merci beaucoup khey. Force à toi avec Guantanamo
L'op, je suis pas un expert du tout donc ma question n'a peut être pas bcp de sens, mais si elle en a je suis très curieux d'avoir ta réponse.
J'avais entendu parler dans une vidéo du "frontrunning", si j'ai bien compris y'a des bots qui tournent 24h/24 7j/7 à la recherche de transactions lucratives en attente, pour les exécuter avant le créateur et voler le profit. C'est ça en gros ?
Si oui, alors qu'est ce qui a empêché un bot de voir ta transaction à plusieurs millions et l'exploiter avant toi?
Le 05 juin 2023 à 13:49:19 :
L'op, je suis pas un expert du tout donc ma question n'a peut être pas bcp de sens, mais si elle en a je suis très curieux d'avoir ta réponse.J'avais entendu parler dans une vidéo du "frontrunning", si j'ai bien compris y'a des bots qui tournent 24h/24 7j/7 à la recherche de transactions lucratives en attente, pour les exécuter avant le créateur et voler le profit. C'est ça en gros ?
Si oui, alors qu'est ce qui a empêché un bot de voir ta transaction à plusieurs millions et l'exploiter avant toi?
Car le concept du frontrun consiste à monitorer les transactions en attente (qui n’ont pas encore été ni confirmée ni revert). Pour voir les transactions en attente, il faut accéder à la mempool, c’est l’endroit où sont stockés les transactions en attente chez les mineurs/validateurs, et où elles sont triées selon les frais de gas (la transaction qui paye le plus de frais est prioritaire).
La mempool est accessible au public sur ethereum par-exemple mais pas sur avalanche (la blockchain où j’ai effectué les transactions). Sur avalanche il est tout simplement impossible de voir la mempool. Seuls les validateurs y ont accès, après il peut y avoir des validateurs/rpc malicieux qui font tourner des bots de frontrun.
Sur ethereum pour éviter de te faire frontrun tu peux utiliser un certain validateur/rpc qui « cache » ta transaction de la mempool, le plus connu est Flashbots.
Tu peux aussi utiliser des logiques dans ton smart contract solidity pour tromper/contrer les bots.
Et perso j’avais utilisé un RPC bien connu type Alchemy pour faire mes transactions, très peu de chances qu’ils fassent tourner des bots dans le dos de leur utilisateurs ça leur ferait une sale reput.
Le 07 juin 2023 à 00:47:45 :
Le 05 juin 2023 à 13:49:19 :
L'op, je suis pas un expert du tout donc ma question n'a peut être pas bcp de sens, mais si elle en a je suis très curieux d'avoir ta réponse.J'avais entendu parler dans une vidéo du "frontrunning", si j'ai bien compris y'a des bots qui tournent 24h/24 7j/7 à la recherche de transactions lucratives en attente, pour les exécuter avant le créateur et voler le profit. C'est ça en gros ?
Si oui, alors qu'est ce qui a empêché un bot de voir ta transaction à plusieurs millions et l'exploiter avant toi?
Car le concept du frontrun consiste à monitorer les transactions en attente (qui n’ont pas encore été ni confirmée ni revert). Pour voir les transactions en attente, il faut accéder à la mempool, c’est l’endroit où sont stockés les transactions en attente chez les mineurs/validateurs, et où elles sont triées selon les frais de gas (la transaction qui paye le plus de frais est prioritaire).
La mempool est accessible au public sur ethereum par-exemple mais pas sur avalanche (la blockchain où j’ai effectué les transactions). Sur avalanche il est tout simplement impossible de voir la mempool. Seuls les validateurs y ont accès, après il peut y avoir des validateurs/rpc malicieux qui font tourner des bots de frontrun.
Sur ethereum pour éviter de te faire frontrun tu peux utiliser un certain validateur/rpc qui « cache » ta transaction de la mempool, le plus connu est Flashbots.
Tu peux aussi utiliser des logiques dans ton smart contract solidity pour tromper/contrer les bots.
Et perso j’avais utilisé un RPC bien connu type Alchemy pour faire mes transactions, très peu de chances qu’ils fassent tourner des bots dans le dos de leur utilisateurs ça leur ferait une sale reput.
D'accord merci d'avoir pris le temps de m'expliquer khey. Qu'est ce qui a été selon toi le plus formateur dans ton apprentissage ? Par exemple tu as fait du code4rna / sherlock quelques mois ? Ou tu as guetté encore encore des protocoles defi jusqu'à trouver une faille ?
Le 09 juin 2023 à 18:47:54 :
Le 07 juin 2023 à 00:47:45 :
Le 05 juin 2023 à 13:49:19 :
L'op, je suis pas un expert du tout donc ma question n'a peut être pas bcp de sens, mais si elle en a je suis très curieux d'avoir ta réponse.J'avais entendu parler dans une vidéo du "frontrunning", si j'ai bien compris y'a des bots qui tournent 24h/24 7j/7 à la recherche de transactions lucratives en attente, pour les exécuter avant le créateur et voler le profit. C'est ça en gros ?
Si oui, alors qu'est ce qui a empêché un bot de voir ta transaction à plusieurs millions et l'exploiter avant toi?
Car le concept du frontrun consiste à monitorer les transactions en attente (qui n’ont pas encore été ni confirmée ni revert). Pour voir les transactions en attente, il faut accéder à la mempool, c’est l’endroit où sont stockés les transactions en attente chez les mineurs/validateurs, et où elles sont triées selon les frais de gas (la transaction qui paye le plus de frais est prioritaire).
La mempool est accessible au public sur ethereum par-exemple mais pas sur avalanche (la blockchain où j’ai effectué les transactions). Sur avalanche il est tout simplement impossible de voir la mempool. Seuls les validateurs y ont accès, après il peut y avoir des validateurs/rpc malicieux qui font tourner des bots de frontrun.
Sur ethereum pour éviter de te faire frontrun tu peux utiliser un certain validateur/rpc qui « cache » ta transaction de la mempool, le plus connu est Flashbots.
Tu peux aussi utiliser des logiques dans ton smart contract solidity pour tromper/contrer les bots.
Et perso j’avais utilisé un RPC bien connu type Alchemy pour faire mes transactions, très peu de chances qu’ils fassent tourner des bots dans le dos de leur utilisateurs ça leur ferait une sale reput.
D'accord merci d'avoir pris le temps de m'expliquer khey. Qu'est ce qui a été selon toi le plus formateur dans ton apprentissage ? Par exemple tu as fait du code4rna / sherlock quelques mois ? Ou tu as guetté encore encore des protocoles defi jusqu'à trouver une faille ?
Le plus formateur : Twitter, lire les anciens audits, et auditer/chercher tout les jours. C’est un tout. Joe dang plusieurs moi j’ai eu un enseignement « naturel » et « homogène ». Je vais essayer de détailler mes journées.
J’me réveillais, jprenais mon pti dej, et j’étais déjà sur mon téléphone à scroller sur Twitter. Sur Twitter t’apprend de tout :
- nouvelles failles qui ont eu lieu + thread explicatif
- petits « find the bug » en solidity, des fois j’connais des fois j’connais pas je regarde donc la réponse en commentaire
- des mecs qui font des threads sur des failles connues en solidity
- les nouveaux protocoles defi qui sortent
- je suis l’actualité des crypto-defi-finance en général, grâce à ça j’ai pu : shorter Luna/UST à temps, trouver les nouvelles hypes (type $PEPE quand personne en parlait encore…)
- des threads techniques qui apprennent des détails sur EVM/solidity/etc…
- des outils intéressants
- et pr finir j’ai des comptes marrant basiques quoi, tjrs cool de voir des memes des fois sur mon fil entre tout ces trucs d’apprentissage
- et y’a sûrement plein d’autres trucs que j’ai zappé
J’pouvais me retrouver à scroller pendant des heures, c’est trop jouissif à un moment, chaque info, chaque nouveau tweet que tu lis, c’est de la science, de l’or intellectuel, au bout d’un moment tu kiffes. Et parenthèse c’est la que tu te rend compte que ouais merde, Twitter c’est pas juste un réseau social, ça dépend juste de l’utilisation que t’en fais et des comptes que tu follow, et si tu follow les bons, c’est la meilleure université du monde.
Bref après quand j’commence a en avoir marre de Twitter (au feeling), j’partais sur DefiLlama pour voir les derniers protocoles listés. J’allais tous les audit un par un. Je cherchais aussi les derniers protocoles sur Google grâce à des recherches précises comme : « "lp collateral" site:medium.com ». Et je cherchais aussi des bouts de code potentiellement vulnérables sur GitHub ça me faisait découvrir des protocoles. Sur Twitter aussi. Toujours important de se tenir à jour. Des fois j’allais aussi sur les explorateurs (type etherscan) pour juste aller voir les dernières transactions impliquant un smart contract et je cliquais sur certaines au hasard pour voir c’était quoi, leur contrat faisait quoi, etc… j’allais aussi voir la catégorie « derniers contrats vérifiés ».
Donc j’avais réussi à faire une routine un peu parfaite (pour moi) qui contient tout ça, avec le temps parfait sur chaque « truc » (au feeling), et j’ai littéralement fait ça pendant des mois et des mois, au moins 6 et peut-être jusqu’à 9-10.
Et bien sûr toutes ces connaissances ne servent pas juste à l’audit, y’a une multitude de choses faisables, une multitude de choix de carrière qui s’offrent à moi. La crypto en général c’est dans ma poche, j’connais chaque recoin. Si t’es comme ça t’as tout gagné.
Tout ça pour te dire : Code4ena/Sherlock/etc c’est de la merde, enfin pour moi du moins, les contests/ctf j’ai jamais rien appris dessus, dans ma vie j’ai du passé 5min chrono sur code4ena et sherlock je sais même pas à quoi ressemble le site. Les concours déjà j’aime pas, on est des milliers d’auditeurs à concourir pour report une faille à 50$ ? 200$ ? Azy flemme lol. Et les CTF : j’ai même pas envie d’en parler tellement ça me fou la haine ça pue juste trop, les mecs t’apprennent à hacker une blockchain, bordel des trucs que tu vas jamais faire, dans aucune dimension.
Données du topic
- Auteur
- RustLang
- Date de création
- 31 mai 2023 à 00:30:05
- Date de suppression
- 26 juin 2023 à 21:01:00
- Supprimé par
- Auteur
- Nb. messages archivés
- 249
- Nb. messages JVC
- 240