Cómo arrebaté 153,037 ETH después de una mala fecha de yesca

A lo largo del fin de semana, hice mucho deslizar a la derecha. Nunca he tenido un Tinder que vaya tan rápido de un partido a otro antes de acordar una fecha. ¡Yo estaba muy emocionado! Al viernes siguiente salimos. La velada comenzó bien, pero ella se ponía cada vez más escalofriante. Unas pocas horas después, ella es una completa loca. Tuve que atornillar. No es un gran problema, prefiero una noche rastreando las transacciones de ICO de estafa de todos modos.
Bien, en el día en que me siento y veo flujos de transacciones de Bitcoin y Ethereum que fluyen desde mercados de cuentas en custodia a vendedores, desde intercambios a usuarios, desde usuarios a contratos mixtos, y así sucesivamente, marcando transacciones interesantes, siguiendo los flujos entre cuentas sospechosas de actividades como intercambio de pornografía infantil, tráfico de personas, etc. 8 horas al día, todos los días. Por la noche, cuando no estoy presionado por mis compañeros para ir a un bar, hago lo mismo pero para mi propia diversión. En estos días, hago un seguimiento de los ICO que obviamente son estafas y veo cómo mueven su dinero. Puede ser bastante divertido, pero eso es un post para otro día.
Bien. Viernes noche. El ruido de los fuegos artificiales del Día de la Bastilla está llenando los cielos. Estoy siguiendo un camino de transacciones en el que he trabajado durante un par de semanas. Una de las transacciones más grandes se originó en un contrato inteligente de billetera multi-sig. No sé por qué lo hice, pero hice clic en el enlace de Etherscan y hojeé el código. Recuerdo que me pareció gracioso cómo Gav / Nicolas escribió esa pieza de ensamblaje allí para llamar a un método interno ( initWallet ) en la biblioteca de la billetera. La solidez es un lenguaje de mierda, así que no estaba tan sorprendida. Pero, quiero decir, de verdad? ¿No fue así para que pueda llamar métodos internos normalmente de contratos derivados? No sé, no soy un programador de Solidity.

Así que quería ver qué tan tonto son Gav / Nicolas o los tuyos, y decidí probarlo yo mismo. Creé el contrato de monedero en mi privatenet e hice referencia a otro contrato e intenté llamar a initWallet () . No vayas. Así que pensé “Hmm … ¿qué pasa si lo convierto en un método externo?”. Así que me moví hacia él e intenté eliminar el modificador interno . ¡Pero espera! No hay modificador interno en primer lugar.

Bueno, eso es un giro interesante de eventos.
Bien bien. Respiracion profunda. ¿Qué significa esto? Bueno, joven, ¡esto significa que quienquiera que tenga dinero en tal billetera posiblemente se agobie! Para estar seguro, intenté llamar a initWallet () externamente con una dirección de propietario arbitraria. Efectivamente, la billetera me agregó como propietario. ¡MALDITO, DIGO!

En esta etapa, no estaba muy segura de qué hacer con eso. Incluso con mi inexistente sentido de moralidad, no tenía ganas de limpiar el 253 ETH de la cartera que encontré por primera vez porque era demasiado bajo para molestar. Ahora, no soy un tipo rico, por lo que 253 ETH es una buena cantidad de dinero, que es aproximadamente un salario de medio año, pero no quiero quemar este hallazgo en 253 ETH, además, no conozco a este tipo tan Lo dejé solo.
Obviamente, si puedo obtener suficiente dinero para una buena jubilación temprana de 20 años, no voy a decir que no. Quiero decir, ¿lo harías? Mencioné que no soy rico, pero tampoco soy pobre, pero esto es muy lucrativo. Finalmente puedo pagar la hipoteca de mi mamá y mi papá, comprarle un auto a mi hermano mayor, pagar la universidad de mi hermana para … ¡ALTO! ¡Estás soñando despierto otra vez! Ahora necesito encontrar otras billeteras vulnerables con mucho dinero en ellas.
¿Pero cómo? Soy bueno analizando datos, escribiendo códigos que detectan patrones y anomalías, incluso acosan a las personas en línea (¡para la ciencia! Bueno, para el trabajo en realidad), pero no sé casi nada sobre cómo funciona Ethereum, cómo se almacenan los contratos inteligentes o más o menos Cualquier cosa que me ayude a localizar esas carteras. Lo único que tengo es una cadena de bloques Ethereum de sincronización rápida que se cobra en la RAM. Intenté grepping básico, pero no tuve éxito. El blockchain no es el DB de tu abuela. Es hora de cambiar de marcha. He hecho cosas básicas en Geth antes, pero ahora es el momento de aprender algo de la API Ethereum de JavaScript.
El plan es sencillo:
1- Encuentre los Arquetipos : Esos son los contratos “raíz” basados en las carteras que se crean.
2- Encuentra a los niños : Una vez que tenga esas direcciones de arquetipo, puedo encontrar todas las carteras afectadas que usan los arquetipos como biblioteca.
3- Triaje : clasifica las billeteras por cantidad y toma el dinero de una muestra aleatoria. Estaba pensando en 10–11k ETH en total.
4- Arrebatar : hacerlo todo de una vez.
5- Limpiar : Pasa los próximos meses limpiándolo. Mi trabajo es atrapar a personas como yo, así que sé cómo salirse con esa cantidad en dólares / euros.
# 1 encontrar los arquetipos
¿He dicho que soy un Ethereum-Moron? Porque yo soy. Realmente intenté grep los archivos de blockchain en el disco.
¿Cómo puedo identificar los arquetipos? Bueno, después de leer sobre Ethereum, aprendí que las firmas de los métodos son calculadas por el EVM como:
get_first_4_bytes (keccak256 (“method_name (arg1_type,…, argn_type)”))
En hexadecimal, eso sería 0xe46dcfeb . No hay mucha entropía allí, pero probablemente lo suficientemente única como para limpiar el blockchain. Rápidamente saqué el siguiente código y lo cargué en mi Geth, y luego fui a dormir un poco. Por ahora, son alrededor de las 04:00 del día siguiente, necesitaba dormir.

Al día siguiente me desperté a esto:
0x4f2875f631f4fc66b8e051defba0c9f9106d7d5a
0xa657491c1e7f16adb39b9b60e87bbb8d93988bc3
0xc0ffee0505d21342cd503bc57ed33fc2cec7f225
…
…
No está mal. Ahora al paso # 2.
# 2 Encuentra a los niños
Mi método de búsqueda es muy lento, pero funcionó. Buscar en las transacciones de creación de contratos es suficiente para mi propósito. Ahora simplemente reemplacé la firma del método anterior con las direcciones de arquetipo recién encontradas. Esto fue bastante sencillo.

Tuve algunos problemas menores con Geth, pero no tuve tiempo desde que tuve un viaje de trabajo el lunes, así que mi jubilación tendrá que esperar.
El lunes por la noche, una vez que regresé de mi viaje, cargué un estado de respaldo desde mayo y comencé a sincronizar. Esto fue bastante rápido. Cargué mi código en Geth y lo dejé correr toda la noche. Me desperté por la mañana con una buena lista de carteras y saldos.
# 3 triaje
Enchufé la lista en Excel y ordené por saldo. Ok, eso es MUCHO ETH. Tengo codicia ¿Por qué tomar 10k cuando puedo vaciar una billetera y obtener ~ 25k? De acuerdo. El límite es de 25k. Tomemos este one.0x91efffb9c6cd3a66474688d0a48aa6ecfe515aa5.
# 4 arrebatar
Esto fue bastante fácil después de que aprendí la API. Está en la línea de

Tienes la idea
Cogí 26,793 ETH y estaba muy feliz con eso. Compré con Bitcoin muy rápido y luego me fui a la cama. Dormí como nunca antes he dormido.
Al día siguiente, mientras estaba en el trabajo, la lista de carteras y saldos seguía picazón en la parte posterior de mi cabeza. Aquí tuve acceso a varias decenas de veces de lo que ya había arrebatado, así que quería un poco más. A la hora del almuerzo, fui a casa y vacié dos billeteras más.
# 5 limpio
Esta es la parte más molesta. Conseguir incluso la mitad de esa cantidad en un fiat limpio será un desafío muy difícil. Ponerlo directamente en efectivo es muy fácil, pero llegar a una etapa en la que pueda usarlo para los fines mencionados anteriormente (pagar préstamos, comprar una casa, etc.) probablemente me llevará hasta el final del próximo año.
Preguntas más frecuentes
- Pero Eric, ¿no está mal? No.
- ¿Me mandas un poco de dinero? No. Ve a buscar tu propia vulnerabilidad y explótala.
- ¿De verdad te vas a retirar? ¡Por supuesto no! Realmente me gusta mi trabajo
- Pero Eric, ¿esto no es ético? No se tal vez La ética no es un problema único que se aplique a todos los aspectos de la vida. Mi ética de trabajo está separada de mi ética de robo de ricos inútiles inútiles y esas son separadas de mi ética familiar.
- Pero Eric, lo tomaste de personas reales … Mira, aquí está la cosa. Si tiene 30 millones de dólares en 250 líneas de código que no ha auditado, entonces depende de usted. Seriamente. Se necesita a cualquier chico de Appsec medio decente menos de un hombre por día para cubrir esas 250 líneas. A lo sumo, eso les costaría unos cuantos miles de dólares. No lo hicieron porque lo querían todo gratis. No lo hicieron porque son codiciosos y baratos. Ellos se lo merecen absolutamente.
- ¿Por qué no tomaste más? Menos personas que te persiguen siempre valen la pena. Además, nadie quiere un tenedor o una caída de precios.
- ¿Cómo sabemos que eres realmente tú? Es absolutamente la menor de mis preocupaciones lo que crees o no crees.
Frasco de puntas: 0xAe22860445EaCf37F07018c9edC84dE2010A714f